程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#attribute-----------初級

C#attribute-----------初級

編輯:C#入門知識

C#attribute-----------初級


前言:

attribute是 .net FrameWork 提出的技術,可以為自己的代碼添加注解,從而實現些特殊功能。

一. attribute功能

attribute被譯作特性,既然是特性,必然功能不一般。

1.微軟的說法

MSDN給出的attribute功能:Attribute類將預定義的系統信息或用戶定義的自定義信息與目標元素相關聯。

預定義的系統的信息也就是.net給出的系統attribute,用戶自定義的信息也就是用戶定義的attribute。目標元素呢就是指元數據的元素TypeDef(類,結構,枚舉,接口,委托),MethodDef,ParamDef,FieldDef,PropertyDef.等等。


2. 自己的看法

無論是定制的Attribute(系統),還是自定義的Attribute 其目的都是為了增強 對你目標元素的修飾。就好比public,private這種修飾符是為了控制對元數據的訪問權限。注釋是為了方便其他人閱讀理解代碼。那麼應用Attribute的場合就是當我需要對元數據進行修飾。那麼問題來了,Attribute究竟能提供什麼樣的特性,讓我們必須要使用它來修飾元數據呢

1)設置我們的Assembly信息

我們創建一個工程時,系統會自動生成一個Assemblyinfo.cs,這個文件就應用了大量了Attribute,為我們提供程序集信息

[assembly: AssemblyTitle("AttributeTest")] //名稱
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]//程序集公司

2)測試時經常用到的,ConitionAttribute,一個工程中需要測試的方法有很多,你把他歸為幾類,然後分別進行測試。總不能測試這類的代碼就注釋掉其他的代碼嘛。這樣做也太low了。這時候就可以利用ConitionAttribute特性

給各類代碼標示上不同的特性。然後在開頭使用#define AttributeName.想測試哪類就使用哪類Attribute名字。

eg。

工程中有兩類方法

[Conition("A")]

public void method1()

public void method2()

[Conition("B")]

public void method3()

public void method4()

然後在開頭加上#define A

這樣運行時就會只識別method1(),method2()

3)上面兩種都是系統提供的定制Attribute,那麼什麼時候使用自定義的呢

有需求的時候其他東西又實現不了的時候就可以考慮自定義Attribute了

比如說,我現在做數據庫表的實體類,這樣取數據的時候綁定到實體類,不用一個個賦值。數據庫中的列對應著實體類的屬性。在select 表時,將結果綁定到實體類,你需要遍歷實體類屬性,所以你必須確保實體類中的都是屬性而不是字段或其他什麼。那麼你如何做到這一點呢,怎麼修飾這個元數據使之一定是屬性呢:自定義attribute

[AttributeUsage(AttributeTargets.Property)]//指定目標元素只能是屬性
class RetriveFromDb : Attribute
{

}


[RetriveFromDb]

public string ID { get; set; }//是property,編譯通過


[RetriveFromDb]

public string GRADE = "98";//field,編譯不通過

本篇只解釋了Attribute功能。後續講解Attribute特點和如何使用

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved