天天看點

C#特性C#特性

C#特性

特性(

Attribute

)是用于在運作時傳遞程式中各種元素(比如類、方法、結構、枚舉、元件等)的行為資訊的聲明性标簽。

特性(

Attribute

)用于添加中繼資料,如編譯器指令和注釋、描述、方法、類等其他資訊。中繼資料是程式中定義的類型的相關資訊。 所有 .NET 程式集都包含一組指定的中繼資料,用于描述程式集中定義的類型和類型成員。 可以添加自定義特性來指定所需的其他任何資訊

.NET架構中一些預定義的特性

  • Obsolete

    -标記某個type過時了
  • WebMethod

    -公開

    WebService

    方法
  • Serializable

    -表示某個類可以被序列化

Obsolete

的使用參考Part 52 - C# Tutorial - Attributes in C#

例如,可以使用

Obsolete

标記某個方法已經過時了,提示其使用新的方法代替

[Obsolete("Use Add(List<int> Numbers) instead")]
public static int Add(int FirstNumber, int SecondNumber)
           

Obsolete

還有一個屬性

error

,指定為

true

的話,就不是警告了,而是錯誤,甚至不能編譯程式

[Obsolete("Use Add(List<int> Numbers) instead", true)]
public static int Add(int FirstNumber, int SecondNumber)
           

AttributeUsage

參考:

  • C# 特性(Attribute)
  • AttributeUsage (C#)

AttributeUsage

是 AttributeUsageAttribute 的别名。

預定義特性

AttributeUsage

描述了如何使用一個自定義特性類。它規定了特性可應用到的項目的類型。

[System.AttributeUsage(System.AttributeTargets.All,  
                   AllowMultiple = false,  
                   Inherited = true)]  
class NewAttribute : System.Attribute { }  
           

參數的含義:

  • AttributeUsage

    -規定特性可被放置的語言元素。預設是

    AttributeTargets.All

    。必須是 AttributeTargets 枚舉的一個或多個元素。 可将多個目标類型與 OR 運算符連結在一起,如下所示:
    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)]  
    class NewPropertyOrFieldAttribute : Attribute { } 
               
  • AllowMultiple

    -如果為 true,則該特性是多用的。預設值是 false(單用的)
    [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]  
    class MultiUseAttr : Attribute { }  
    
    [MultiUseAttr]  
    [MultiUseAttr]  
    class Class1 { }  
    
    [MultiUseAttr, MultiUseAttr]  
    class Class2 { } 
               
  • inherited

    -如果為 true,則該特性可被派生類繼承。預設值是 false(不被繼承)

自定義特性

參考:

  • 建立自定義特性 (C#)
  • C# 特性(Attribute)

可通過定義特性類建立自己的自定義特性,特性類是直接或間接派生自 Attribute 的類,可快速輕松地識别中繼資料中的特性定義。

建立并使用自定義特性包含四個步驟:

  • 聲明自定義特性
  • 建構自定義特性
  • 在目标程式元素上應用自定義特性
  • 通過反射通路特性

自定義

Author

特性類

[System.AttributeUsage(System.AttributeTargets.Class |  
                       System.AttributeTargets.Struct)  
]  
public class Author : System.Attribute  
{  
    private string name;  
    public double version;  

    public Author(string name)  
    {  
        this.name = name;  
        version = ;  
    }  
} 
           

使用

AttributeUsage

特性可使

Author

特性僅對類和

struct

聲明有效。

可按如下方式使用這一新特性:

[Author("P. Ackerman", version = )]  
class SampleClass  
{  
    // P. Ackerman's code goes here...  
}