成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

學習C#:Attribute與Property

開發 后端
本文介紹了什么是Attribute,Attribute的概念定義,Attribute與Property的區別。

一.什么是Attribute

先看下面的三段代碼:

1.自定義Attribute類:VersionAttribute

  1. [AttributeUsage(AttributeTargets.Class)]  
  2. public class VersionAttribute : Attribute  
  3. {  
  4.     public string Name { getset; }  
  5.     public string Date { getset; }  
  6.     public string Describtion { getset; }  

2.使用自定義Attribute的Class:

  1. [Version(Name = "hyddd", Date = "2009-07-20", Describtion = "hyddd's class")]  
  2. public class MyCode  
  3. {  
  4.     //...  

3.上面這個Class中的Attribute一般會被如何使用呢?

  1. class Program  
  2. {  
  3.     static void Main(string[] args)  
  4.     {  
  5.         var info = typeof(MyCode);  
  6.         var classAttribute = (VersionAttribute)Attribute.GetCustomAttribute(info, typeof(VersionAttribute));  
  7.         Console.WriteLine(classAttribute.Name);  
  8.         Console.WriteLine(classAttribute.Date);  
  9.         Console.WriteLine(classAttribute.Describtion);  
  10.     }  

示例完畢!上面三段代碼相信已經說明了Attribute大概是一個什么東西和怎么去用。

二.深入討論Attribute

1.Attribute的概念定義

關于Attribute概念的定義,我直接引用《你必須知道的.NET之特性和屬性》中的一段來說明:

MADN的定義為:公共語言運行時允許添加類似關鍵字的描述聲明,叫做attributes, 它對程序中的元素進行標注,如類型、字段、方法和屬性等。Attributes和Microsoft .NET Framework文件的元數據(metadata)保存在一起,可以用來向運行時描述你的代碼,或者在程序運行的時候影響應用程序的行為。

我們簡單的總結為:定制特性attribute,本質上是一個類,其為目標元素提供關聯附加信息,并在運行期以反射的方式來獲取附加信息。

噢,原來Attribute的目的是為元素提供關聯附加信息。其中,上面***段代碼中“[AttributeUsage(AttributeTargets.Class)] ”說明了Attribute提供附加信息的元素是Class,所以如果上面第二段的代碼改為:

  1. public class MyCode  
  2. {  
  3.     [Version(Name = "hyddd", Date = "2009-07-20", Describtion = "hyddd's class")]  
  4.     public void Test() { }  
  5. }  
  6.  

會出現編譯錯誤。

2.Attribute作為編譯指令

Attribute類是在編譯的時候被實例化的,而不是像通常的類那樣在運行時候才實例化。所以在第三段代碼中,你可以在沒有實例化MyCode對象的情況下取到MyCode的Attribute信息。由于Attribute類是在編譯的時候被實例化的,所以你還可以用外部工具維護這些Attribute信息。

3.Attribute與Property

從中文來說,Attribute和Property的中文都叫“屬性”,很容易讓人混淆。現在的文章,Attribute一般翻譯為”特性”,而Property稱為“屬性”。

或許你會問,我用靜態的Property/Field一樣可以做到在不實例化的時候拿到一些信息,如果這樣的話,Attribute又有什么存在意義呢?

1.Property:

Property可以說是一個面向對象的概念,提供了對私有字段的訪問封裝,在C#中以get和set訪問器方法實現對可讀可寫屬性的操作,提供了安全和靈活的數據訪問封裝。比如:

  1. public class Robot  
  2. {  
  3.     private string name = "";   //字段:Field  
  4.     public string Name          //屬性:Property,對Field進行封裝。  
  5.       {  
  6.         get { return name; }  
  7.         set { name = value; }  
  8.     }  

2.Attribute:

Attribute的目標是:為元素提供附加信息。它的作用更類似于注釋。

可以說,Property/Field和Attribute是兩個完全不同的概念,雖然他們有些時候能做一樣的事,但請記住,他們是從本質上就不同的兩個東西。

三.實現自己的Attribute時需要注意的一些問題

1.自定義的Attribute必須直接或者間接繼承System.Attribute。

2.這里有一個約定:所有自定義的特性名稱都應該有個Attribute后綴。因為當你的Attribute施加到一個程序的元素上的時候,編譯器先查找你的Attribute的定義,如果沒有找到,那么它就會查找“Attribute名稱"+Attribute的定義。如果都沒有找到,那么編譯器就報錯。這就是為什么我可以再上面***段代碼中,定義一個VersionAttribute,但在第二段代碼中,我使用卻是Version這個Attribute。:>

下面是一些開發自定義Attribute時,可能需要用到的資料:

【1】Attribute可以關聯的元素包括:

程序集(assembly)、模塊(module)、類型(type)、屬性(property)、事件(event)、字段(field)、方法(method)、參數(param)、返回值(return)。例如:

  1. [assembly: Version(Name = "hyddd", Date = "2009-07-20", Describtion = "hyddd's class")]  
  2. public class MyCode  
  3. {  
  4.     //......  

用指定的前綴來表示特性所應用的目標元素,建議這樣來處理,因為顯式處理可以消除可能帶來的二義性。

【2】AttributeTargets目標包括:

AttributeTargets目標包括 

【3】AttributeUsageAttribute中的3個屬性(Property)說明:

AttributeUsageAttribute中的3個屬性(Property)說明   

四.參考資料

【1】Msdn

【2】《你必須知道的.NET之特性和屬性》,博主嚴重推薦!

【3】《Attribute在.net編程中的應用》系列文章

【編輯推薦】

  1. C#自定義控件的開發:Pin和Connector
  2. 比較C#自定義控件的property(屬性)和/attribute(性質)
  3. C#組件開發:COM和.NET對象之間的互操作
  4. 介紹.NET平臺、C#和ASP.NET
  5. C# Attributes:定義設計期信息
責任編輯:book05 來源: cnblogs
相關推薦

2009-09-11 11:16:53

C# Attribut

2009-08-03 14:42:50

C#自定義控件

2024-05-20 00:00:00

C#屬性Property

2015-08-10 10:58:53

dompropertyattribute

2025-03-10 11:40:00

前端開發HTML

2025-03-10 00:00:00

property?attributeHTML

2009-08-27 16:11:03

C# delegateC# event

2010-12-30 09:44:10

C#Attribute

2009-08-24 09:55:26

C#接口轉換

2009-08-24 11:02:52

C#接口映射

2021-04-14 07:47:59

AttributeC#屬性

2009-09-11 11:33:58

C# WinForm控Attribute

2024-05-17 08:42:52

AttributeMyClass方法

2009-09-11 10:44:55

C#語言

2009-08-12 09:28:36

C# WiteOne

2009-08-20 17:49:53

學習C#程序

2009-08-13 18:21:52

C#學習筆記

2009-08-19 17:11:49

C#程序集

2009-08-20 15:02:57

C# If語句

2009-08-24 10:31:37

C#接口繼承
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 夜夜夜夜草 | 日韩毛片中文字幕 | 国产精品网址 | 365夜爽爽欧美性午夜免费视频 | 亚洲精品一区二区在线观看 | 国产9久| 国产第一页在线播放 | 欧美一区二区在线观看视频 | 美女视频黄的免费 | 天天看天天爽 | 天天干天天操天天射 | 欧美成人第一页 | 九九在线视频 | 羞羞的视频免费在线观看 | 播放一级黄色片 | 久久美女网 | 在线免费视频一区 | 在线一区视频 | a黄毛片| 午夜精品在线观看 | 国产伊人久久久 | 在线亚洲电影 | 国产日韩欧美 | 黄色免费观看网站 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 国产成人综合亚洲欧美94在线 | 四虎永久免费黄色影片 | 天堂网色 | 国产精品一区二区无线 | 国产女人与拘做受免费视频 | 亚洲精品一区中文字幕乱码 | www.日韩系列 | 日本中出视频 | 亚洲成人中文字幕 | 久久在线视频 | 日韩视频免费在线 | 中日韩欧美一级片 | 久久日本| 亚洲欧美一区二区三区视频 | 亚洲欧美一区二区三区在线 | 久久久久久亚洲精品 |