一:前言
通過特性與代碼(程序集、類型、方法、屬性等)相關聯(lián)。特性與程序實體關聯(lián)后,即可在運行時使用反射技術查詢特性
可以通過使用特性向程序添加聲明性信息,一個聲明性標簽是通過放置在它所應用的元素前面的方括號[ ]來描述的
二:使用
——Conditional
可以為一個方法添加Conditional特性使這個方法的執(zhí)行依賴于指定的預處理標識符
#define Debug using System; using System.Diagnostics; class MainClass { public static void Main() { Fun1(); Fun2(); } [Conditional("Debug")] public static void Fun1() { Console.WriteLine("Fun1"); } public static void Fun2() { Console.WriteLine("Fun2"); } }
?
?
——Obsolete
可以為類、屬性、字段、方法添加Obsolete特性使這個目標元素標記為過時的
Obsolete特性的第二個參數(shù)是否為error默認為false,不影響編譯通過只會提示warning,如果為true則編譯不會通過
public class Test { [Obsolete] public int a; [Obsolete("use a instead")] public int b; [Obsolete("", true)] public void Fun(){} }
?
?
——自定義特性
步驟:
——構建一個自定義特性[AttributeUsage()]
——編寫一個自定義特性類,類名必須以Attribute結尾并繼承自Attribute類
——將定位的參數(shù)通過構造函數(shù)傳遞(每個自定義特性類必須至少有一個構造函數(shù))
——通過反射檢索到特性信息
using System; class MainClass { public static void Main() { Test test = new Test(); Type t = test.GetType(); object[] o = t.GetCustomAttributes(true); TestAttribute attribute = (TestAttribute)o[0]; Console.WriteLine(attribute.msg); } } [Test("這是測試類")] public class Test { } [AttributeUsage(AttributeTargets.All)] public class TestAttribute : Attribute { public string msg; public TestAttribute(string msg) { this.msg = msg; } }
?
本文摘自 :https://blog.51cto.com/u