特性(Attribute):是用於在運行時傳遞程序中各類元素(好比類、方法、結構、枚舉、組件等)的行爲信息的聲明性標籤。html
您能夠經過使用特性向程序添加聲明性信息。一個聲明性標籤是經過放置在它所應用的元素前面的方括號([ ])來描述的。數組
特性(Attribute)用於添加元數據,如編譯器指令和註釋、描述、方法、類等其餘信息。框架
.Net 框架提供了兩種類型的特性:預約義特性和自定義特性。spa
1.自定義特性:Net 框架容許建立自定義特性,用於存儲聲明性的信息,且可在運行時被檢索。該信息根據設計標準和應用程序須要,可與任何目標元素相關。設計
建立並使用自定義特性包含四個步驟:code
/// <summary> /// 別名特性 /// </summary> [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property, AllowMultiple = true, Inherited = true)] public class AliasAttribute : Attribute { /// <summary> /// 別名 /// </summary> public string Name { get; set; } /// <summary> /// 別名類型 /// </summary> public Type Type { get; set; } /// <summary> /// 別名名稱,類型默認爲string /// </summary> /// <param name="name"></param> public AliasAttribute(string name) { Name = name; Type = typeof(string); } /// <summary> /// 別名名稱,類型爲傳入類型 /// </summary> /// <param name="name"></param> public AliasAttribute(string name, Type type) { Name = name; Type = type; } }
2.在目標程序元素上應用自定義特性htm
public class UserDto { /// <summary> /// 姓名 /// </summary> [Alias("name", typeof(string))] public string Name { get; set; } /// <summary> /// 電話 /// </summary> [Alias("phone", typeof(string))] public string Phone { get; set; } /// <summary> /// 備註 /// </summary> [Alias("remark", typeof(string))] public string Remark { get; set; } }
3.經過反射訪問特性blog
// 獲取type var userType = typeof(UserDto); // 獲取類中全部公共屬性集合 var PropertyArr = userType.GetProperties(); foreach (var itemProperty in PropertyArr) { // 獲取屬性上存在AliasAttribute的數組 var customAttributesArr = itemProperty.GetCustomAttributes(typeof(AliasAttribute), true); if (customAttributesArr.Any()) { // 獲取特性 var first = customAttributesArr.FirstOrDefault(); } else { // 不存在特性 } }