Attribute 是什麼
Attribute 是一種可由使用者自由定義的修飾符(Modifier),可以用來修飾各種需要被修飾的目標。
簡單的說,Attribute就是一種“附著物” —— 就像牡蠣吸附在船底或礁石上一樣。
這些附著物的作用是為它們的附著體追加上一些額外的資訊(這些資訊就儲存在附著物的體內)—— 比如“這個類是我寫的”或者“這個函數以前出過問題”等等。
Attribute 的作用
特性Attribute 的作用是添加中繼資料。
中繼資料可以被工具支援,比如:編譯器用中繼資料來輔助編譯,調試器用中繼資料來偵錯工具。
個人理解
注釋是寫給人看的. 而Attribute是寫給程式看的. 在某個對象上加上注釋, 在啟動並執行時候通過反射可以拿到這個注釋.
從而進行一些操作.
樣本
[Name("中文名","謝霆鋒"),Name("英文名","Nic")]
public class Student { }
public class School {
[Name("中文名", "謝霆鋒"), Name("英文名", "Nic")]
public string schoolname { get{return "牛逼大學";} }
}
[AttributeUsage(AttributeTargets.All,AllowMultiple=true)]
public class Name:System.Attribute
{
public string Key { get; set; }
public string Value { get; set; }
public Name(string key, string value) {
Key = key;
Value = value;
}
}
//擷取類的特性
var attrs= Attribute.GetCustomAttributes(typeof(Student));
Response.Write("<br>");
Response.Write("類的特性有");
foreach (var item in attrs)
{
var t=(Name)item;
Response.Write("<br>");
Response.Write((t).Key+" : "+t.Value+" , "+t.TypeId.ToString());
}
//擷取屬性的特性. 同樣擷取方法, 欄位,等的特性都是這樣
var Properties = typeof(School).GetProperties();
Response.Write("<br>"); Response.Write("<br>");
Response.Write("屬性的特性有");
foreach (var item in Properties)
{
foreach (var attr in item.GetCustomAttributes(false))
{
var t = (Name)attr;
Response.Write("<br>");
Response.Write((t).Key + " : " + t.Value + " , " + t.TypeId.ToString());
}
}
這樣. 我們在啟動並執行時候得到了Name類的執行個體. 輸出了Name的屬性