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 類去標記,這個類包含了如下屬性:validon
,allowmultiple
,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命名空間,在使用反射的開始,你會獲取乙個...