c#中的特性
阿新 • • 發佈:2017-12-08
test 獲得 () format attribute let orm 自定義 alt
c#中的特性
特性在我的理解就是在類或者方法或者參數上加上指定的標記,然後實現指定的效果。
和Java中的註解@Annotation類似。
c#內置的特性之Obsolete
[Obsolete("過期了")]
public static void Test()
{
Console.WriteLine("Test");
}
提示警告.png
[Obsolete("過期了",true)]
public static void Test()
{
Console.WriteLine("Test");
}
提示錯誤.png
c#內置的特性之Conditional
使用方法如下
[Conditional("IsTest")]
public void Test()
{
Console.WriteLine("Test");
}
如果沒有定義IsTest宏的話,方法變成了灰色.png
意思是如果定義了宏IsTest
則對Test的調用會成功,如果未定義,則該方法的調用不會成功。註意:此時雖然調用不會成功,但是仍然會被編譯到程序集中。
c#內置的特性之CallerFilePath,CallerLineNumber,CallerMemberName
這三個特性可以獲取調用的所在文件,行數,以及方法名稱。猛一看沒什麽用,但是在打log的時候我覺得還是非常有用的。
static void PrintOut(string message,[CallerFilePath] string fileName="",[CallerLineNumber] int lineNumber=0,[CallerMemberName] string methodName="") { Console.WriteLine("message:"+message); Console.WriteLine("fileName:" + fileName); Console.WriteLine("lineNumber:" + lineNumber); Console.WriteLine("methodName:" + methodName); }
c#內置特性之DebuggerStepThrough,加在方法上
調試的時候假如那個方法確定無誤,加上這個特性,調試的時候可以跳過debug的單步調試
c#中自定義一個特性以及獲取該特性的屬性
定義一個特性
[AttributeUsage(AttributeTargets.Class)] //特性的應用範圍
public class MyTestAttribute : System.Attribute
{
public string Description { get; set; }
public string VersionNumber { get; set; }
public int ID { get; set; }
}
將該特性加在類上,這裏的特性會自動把Attribute尾去掉
[MyTest(Description = "aaa",ID = 1,VersionNumber = "3")]
public class Program
{
...
}
獲取特性的屬性
Program p = new Program();
MyTestAttribute attribute = (MyTestAttribute) p.GetType().GetCustomAttribute(typeof (MyTestAttribute)) ;
Console.WriteLine(attribute.Description);
很多用過spring的道友肯定知道註解在Java中的用法,特性在c#中的用法和在Java中是一樣的。有時間我會用c#的特性實現一個簡單的spring容器,來實現控制反轉。以前用java實現過,但是不知道代碼扔到哪裏去了。還用java實現過簡單的orm。代碼也不知道扔到哪裏去了!!所以一定要整理代碼,整理總結!!!
作者:六道真君
鏈接:http://www.jianshu.com/p/93d0b99b52ac
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
c#中的特性