標籤:c# attribute
前言:
attribute是 .net FrameWork 提出的技術,可以為自己的代碼添加註解,從而實現些特殊功能。
一. attribute功能
attribute被譯作特性,既然是特性,必然功能不一般。
1.微軟的說法
MSDN給出的attribute功能:Attribute類將預定義的系統資訊或使用者定義的自訂資訊與目標元素相關聯。
預定義的系統的資訊也就是.net給出的系統attribute,使用者自訂的資訊也就是使用者定義的attribute。目標元素呢就是指中繼資料的元素TypeDef(類,結構,枚舉,介面,委託),MethodDef,ParamDef,FieldDef,PropertyDef.等等。
2. 自己的看法
無論是定製的Attribute(系統),還是自訂的Attribute 其目的都是為了增強 對你目標元素的修飾。就好比public,private這種修飾符是為了控制對中繼資料的存取權限。注釋是為了方便其他人閱讀理解代碼。那麼應用Attribute的場合就是當我需要對中繼資料進行修飾。那麼問題來了,Attribute究竟能提供什麼樣的特性,讓我們必須要使用它來修飾中繼資料呢
1)設定我們的Assembly資訊
我們建立一個工程時,系統會自動產生一個Assemblyinfo.cs,這個檔案就應用了大量了Attribute,為我們提供者集資訊
[assembly: AssemblyTitle("AttributeTest")] //名稱
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]//程式集公司
2)測試時經常用到的,ConitionAttribute,一個工程中需要測試的方法有很多,你把他歸為幾類,然後分別進行測試。總不能測試這類的代碼就注釋掉其他的代碼嘛。這樣做也太low了。這時候就可以利用ConitionAttribute特性
給各類代碼標示上不同的特性。然後在開頭使用#define AttributeName.想測試哪類就使用哪類Attribute名字。
eg。
工程中有兩類方法
[Conition("A")]
public void method1()
public void method2()
[Conition("B")]
public void method3()
public void method4()
然後在開頭加上#define A
這樣運行時就會只識別method1(),method2()
3)上面兩種都是系統提供的定製Attribute,那麼什麼時候使用自訂的呢
有需求的時候其他東西又實現不了的時候就可以考慮自訂Attribute了
比如說,我現在做資料庫表的實體類,這樣取資料的時候綁定到實體類,不用一個個賦值。資料庫中的列對應著實體類的屬性。在select 表時,將結果綁定到實體類,你需要遍曆實體類屬性,所以你必須確保實體類中的都是屬性而不是欄位或其他什麼。那麼你如何做到這一點呢,怎麼修飾這個中繼資料使之一定是屬性呢:自訂attribute
[AttributeUsage(AttributeTargets.Property)]//指定目標元素只能是屬性
class RetriveFromDb : Attribute
{
}
[RetriveFromDb]
public string ID { get; set; }//是property,編譯通過
[RetriveFromDb]
public string GRADE = "98";//field,編譯不通過
本篇只解釋了Attribute功能。後續講解Attribute特點和如何使用
C#attribute-----------初級