如何在 C 中使用 Attribute

2021-10-12 16:52:03 字數 3246 閱讀 4295

attribute 在 c# 中是乙個非常強大的特性,它能夠給你的程式集新增元資料資訊。

attribute 實際上是乙個物件,它可以與以下元素中的任何乙個相關聯: 程式集、類、方法、委託、列舉、事件、字段、介面、屬性和結構,它會在這些物件上做資訊宣告,當程式執行之後,你可以通過反射來獲取關聯到這些物件上的 attribute 資訊,換句話說:你可以通過 atrribute 向程式集注入一些額外資訊,然後在執行時通過反射來獲取,attribute 一般由名字 + 一些可選引數構成, attribute 名字對應著 atrribute 類。

你可以利用 attribute 去校驗你的業務model的正確性, attribute 有兩種:內建 + 自定義, 前者是 .net framework 框架的組成部分,後者需要通過繼承system.attribute類來實現自定義。

現在來看看**怎麼寫,obsolete特性用來標記乙個方法是過時的,這個過時的意思是:你不應該再使用這個方法了,未來框架也會將其剔除,目前也存在其替代方案。其實在第三方框架中有很多這樣的例子,下面的**片段展示了如何在方法頂部使用obsolete特性。

[obsolete("this method is obsolete...")]

public static void dosomework()

如果你在程式中呼叫了這個方法,當你編譯**時,在 visual studio 輸出視窗中會現在一些警告資訊,如下圖:

當然,如果你一定要忽視它也是可以的,現在,假如你希望你的開發同事不允許呼叫這個方法,那如何去限定呢?哈哈,可以使用 obsolete 的第二個引數,這個引數是可選的,下面是dosomework()方法的修改版本,請注意這是乙個 boolean 型引數。

[obsolete("this method is obsolete...", true)]

public static void dosomework()

當把 true 給了這個可選引數後,再次編譯**,你會發現**根本編譯不通過,是不是完美的解決了你的問題,是吧! 截圖如下:

這一小節我們來看一下如何去實現自定義的 attribute,要想自定義實現,可以建立乙個類並繼承system.attribute類即可,如下**所示:

using system;

public class customattribute : attribute

要想限定 customattribute 的使用,可以用 attributeusage 類去標記,這個類包含了如下屬性:validonallowmultiple,inherited等等,這些標記都可以限定 customattribute 的使用。

下面的**片段展示了 customattribute 的修改版本,這個類使用建構函式去給內部的私有 string 賦值,**僅僅用於演示目的。

[attributeusage(attributetargets.all)]

public class customattribute : attribute

public string text

}

當然你也可以按需去指定這些 attributetargets,如下**所示:

[attributeusage(attributetargets.class |

attributetargets.constructor |

attributetargets.field |

attributetargets.method |

attributetargets.property,

allowmultiple = true)]

public class customattribute : attribute

public string text

}

接下來你可以用反射來獲取應用到物件上的所有attributes,**如下:

static void main(string args)

}

接下來我準備將 customattribute 類應用到 下面的 someclass 類上。

[customattribute("hello world...")]

public class someclass

可以著重看下 customattribute 是如何安插在 someclass 上的,而且我還傳遞了乙個hello world...字串給它,下面的**展示了如何將 customattribute 中的 text 屬性列印出來。

更多高質量乾貨:參見我的 github: dotnetfly

如何在C 中使用WebService

將他解壓後,進入到資料夾 gsoap 2.8.18 gsoap 2.8 gsoap bin win32 裡面有2個我們要用到的exe,wsdl2h.exe和soapcpp2.exe,如果缺少乙個typemap.dat,則從gsoap 2.8.18 gsoap 2.8 gsoap下拷貝進來,最後就可以...

如何在 C 中使用 RabbitMQ

rabbitmq 是乙個非常流行的,開源的,使用erlang語言編寫的框架,通常在電信級平台中作為訊息中介軟體使用,rabbitmq實現了高階的amqp協議用於實現程序間,應用程式間,伺服器之間的訊息互動,而且它還有乙個非常?的特性,你可以使用自定義外掛程式來擴充套件rabbitmq的功能,而且它還...

如何在 C 中使用 反射

c 中的反射常用於在程式的執行時獲取型別的元資料,可獲取的資訊包括已載入到程序中的程式集和型別資訊,它和 c 中的rtti runtime type information 的作用是差不多的。為了能夠使用反射,需要在專案中引用system.reflection命名空間,在使用反射的開始,你會獲取乙個...