1. 程式人生 > 其它 >C# 學習 亂解讀 屬性 Attribute

C# 學習 亂解讀 屬性 Attribute

資料:

Attribute 類-

Attribute 類 (System) | Microsoft Docs

C#中Attribute的應用_阿拉丁部落格-CSDN部落格

看了好幾篇博文,胡亂解讀下。

1 Atrribute是個類,有n中方法,n中繼承(廢話)

2Atrribute類施加在 類/成員/方法 上

[Hello("這是個啥?")]
class AnimalTypeTestClass {
    [AnimalType(Animal.Dog)]
    public void DogMethod() {}

    [AnimalType(Animal.Cat)]
    public void CatMethod() {}

    [AnimalType(Animal.Bird)]
    public void BirdMethod() {}
}

3 施加屬性類時,屬性類比如已經例項化了。

如上面的   

class AnimalTypeTestClass。雖然只是類定義。單我們已經知道,這個類有個
[Hello("這是個啥?")]屬性,類裡面的方法 DogMethod,有個[AnimalType(Animal.Dog)]屬性。這個屬性是有具體值的,是例項化了的。

4
屬性類有啥用
對應定義了的屬性。就等同於int i=0;一樣,後面如果不用i 那麼沒啥鳥用。所以定義了屬性,後面要用才有意義。
我理解的有兩種用法,1 系統用 2 自用
4.1 (系統用)Attribute作為編譯器的指令
  系統用,定義屬性後,系統自會使用他,我們就不管了。

在C#中存在著一定數量的編譯器指令,如:#define DEBUG, #undefine DEBUG, #if等。這些指令專屬於C#,而且在數量上是固定的。而Attribute用作編譯器指令則不受數量限制。比如下面的三個Attribute:

Conditional:起條件編譯的作用,只有滿足條件,才允許編譯器對它的程式碼進行編譯。一般在程式除錯的時候使用。
DllImport:用來標記非.NET的函式,表明該方法在一個外部的DLL中定義。
Obsolete:這個屬性用來標記當前的方法已經被廢棄,不再使用了。


4.2 自用
自用玩的比較多的是json轉換...
不管怎麼施加Attribute,總是有其他的地方要用到。
那麼就要想辦法取出屬性。
比如 祖傳程式碼
class a{
string str1;
string str2;
string str3;
}有個需求要轉換為json是不是很抓蝦
搞個屬性...