在C#中,attribute是作為一種程序源代碼的元素修飾符存在的,因為有的時候我們需要給自己的代碼添加一些描述性的說明信息。當這些我們不願意用注釋或內部代碼用來描述的信息,被作為attribute代碼而編譯的話,編譯器會將它們生成到metadata中去。
同時,attribute也是一種object。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method |
AttributeTargets.ReturnValue | AttributeTargets.Property, AllowMultiple = true, Inherited = true)]
public class CountryAttribute : Attribute
{
public CountryAttribute(){}
public CountryAttribute(string name)
{
this.Name = name;
}
public int PlayerCount { get; set; }
public string Name { get; set; }
}
[Country("China")]
[Country("America")]
public class Sportsman
{
public string Name { get; set; }
[Country(PlayerCount = 5)]
public virtual void Play(){}
}
public class Hoopster : Sportsman
{
public override void Play(){}
}
使用attribute有很顯著的方便。他是一種會被編譯的程序,但卻能像注釋一樣使用。比起使用注釋,attribute可以在執行結果中標識函數、返回值等結果,實現一些更加復雜的標識功能。但是,根據一些資料attribute本身並不是修飾符,而是一種類,被實例化的類,通過反編譯可以看到這一點。