c# 中的反射
常用於在程式的執行時獲取型別
的元資料,可獲取的資訊包括已載入到程序中的程式集
和型別
資訊,它和 c++ 中的rtti(runtime type information)
的作用是差不多的。
為了能夠使用反射,需要在專案中引用system.reflection
命名空間,在使用反射的開始,你會獲取乙個 type 型別的物件,從這個物件上進一步獲取程式集,型別,模組
等資訊,可以通過 反射 動態的生成某個型別的例項,甚至還能動態呼叫這個型別上的方法。
在system.reflection
命名空間下,定義了如下幾大核心型別。
現在我們一起研究一下怎麼使用,考慮下面定義的 customer 類。
下面的**片段展示了如何通過 反射 來獲取 customer 的類名以及 customer 的所屬命名空間。public class customer
public string firstname
public string lastname
public string address
}
再看乙個例子,如何通過反射獲取 customer 下的所有屬性,並且將屬性名字全部展示在控制台上,如下**所示:
值得注意的是,typeof(customer).getproperties()
預設只能獲取 標記為 public 的屬性集合,對應著 customer 類下的四個公開屬性。
接下來再來看看如何通過反射
獲取型別下的 建構函式 和 公共方法 的元資料資訊,這裡還是繼續使用customer
類,在類中新增乙個 建構函式 和乙個 validate 方法,此方法用於校驗入參的合法性,下面就是修改後的 customer 類。
然後再來看看通過 反射 來獲取 customer 下所有定義的建構函式,不過這裡只定義了乙個建構函式,因此只能列出乙個。public class customer
public string firstname
public string lastname
public string address
public customer()
public bool validate(customer customerobj)
}
同樣也要注意,預設情況下getconstructors()
方法只能獲取 customer 的所有標記為 public 的建構函式。
接下來看看如何展示 customer 中的所有 public 方法,因為該類中只定義了乙個 public 方法,所以控制台上也應該只會展示乙個,如下**僅供參考。
是不是很驚訝,剛才還說是乙個方法,居然多了好幾個,要知道多的那幾個方法,來自於兩方面。
相信在你的應用程式中,經常會在 領域實體 上使用各種 attribute 特性,這時候就可以通過上面的**反射提取 領域實體 中的方法上的attribute資訊,從而根據提取到的 attribute 執行你的具體業務邏輯。
更多高質量乾貨:參見我的 github: csharptranslate
如何在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 中使用 Attribute
attribute 在 c 中是乙個非常強大的特性,它能夠給你的程式集新增元資料資訊。attribute 實際上是乙個物件,它可以與以下元素中的任何乙個相關聯 程式集 類 方法 委託 列舉 事件 字段 介面 屬性和結構,它會在這些物件上做資訊宣告,當程式執行之後,你可以通過反射來獲取關聯到這些物件上...