一:前言
通過特性與代碼(程序集、類型、方法、屬性等)相關(guān)聯(lián)。特性與程序?qū)嶓w關(guān)聯(lián)后,即可在運(yùn)行時(shí)使用反射技術(shù)查詢特性
可以通過使用特性向程序添加聲明性信息,一個(gè)聲明性標(biāo)簽是通過放置在它所應(yīng)用的元素前面的方括號(hào)[ ]來描述的
二:使用
——Conditional
可以為一個(gè)方法添加Conditional特性使這個(gè)方法的執(zhí)行依賴于指定的預(yù)處理標(biāo)識(shí)符
#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特性使這個(gè)目標(biāo)元素標(biāo)記為過時(shí)的
Obsolete特性的第二個(gè)參數(shù)是否為error默認(rèn)為false,不影響編譯通過只會(huì)提示warning,如果為true則編譯不會(huì)通過
public class Test { [Obsolete] public int a; [Obsolete("use a instead")] public int b; [Obsolete("", true)] public void Fun(){} }
?
?
——自定義特性
步驟:
——構(gòu)建一個(gè)自定義特性[AttributeUsage()]
——編寫一個(gè)自定義特性類,類名必須以Attribute結(jié)尾并繼承自Attribute類
——將定位的參數(shù)通過構(gòu)造函數(shù)傳遞(每個(gè)自定義特性類必須至少有一個(gè)構(gòu)造函數(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("這是測(cè)試類")] 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