91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#中Attribute與Property如何使用

發布時間:2021-07-08 13:52:59 來源:億速云 閱讀:179 作者:Leah 欄目:編程語言

今天就跟大家聊聊有關C#中Attribute與Property如何使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

一.什么是Attribute

先看下面的三段代碼:

1.自定義Attribute類:VersionAttribute

[AttributeUsage(AttributeTargets.Class)]  public class VersionAttribute : Attribute  {      public string Name { get; set; }      public string Date { get; set; }      public string Describtion { get; set; }  }

2.使用自定義Attribute的Class:

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

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

class Program  {      static void Main(string[] args)      {          var info = typeof(MyCode);          var classAttribute = (VersionAttribute)Attribute.GetCustomAttribute(info, typeof(VersionAttribute));          Console.WriteLine(classAttribute.Name);          Console.WriteLine(classAttribute.Date);          Console.WriteLine(classAttribute.Describtion);      }  }

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

二.深入討論Attribute

1.Attribute的概念定義

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

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

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

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

public class MyCode  {      [Version(Name = "hyddd", Date = "2009-07-20", Describtion = "hyddd's class")]      public void Test() { }  }

會出現編譯錯誤。

2.Attribute作為編譯指令

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

3.Attribute與Property

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

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

1.Property:

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

public class Robot  {      private string name = "";   //字段:Field      public string Name          //屬性:Property,對Field進行封裝。        {          get { return name; }          set { name = value; }      }  }

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)。例如:

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

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

【2】AttributeTargets目標包括:

C#中Attribute與Property如何使用

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

C#中Attribute與Property如何使用  

看完上述內容,你們對C#中Attribute與Property如何使用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巫溪县| 乐都县| 无为县| 剑河县| 甘孜县| 商城县| 前郭尔| 桂阳县| 顺平县| 巴东县| 措勤县| 本溪市| 广饶县| 洛隆县| 囊谦县| 宣武区| 五原县| 嘉善县| 武平县| 汉寿县| 乌兰县| 广南县| 龙州县| 凭祥市| 三门峡市| 磐安县| 陆川县| 河池市| 岳阳县| 无棣县| 舒兰市| 黄平县| 安义县| 房产| 老河口市| 左云县| 华蓥市| 灵璧县| 六盘水市| 长子县| 东明县|