從程式集獲得類型
先說點題外話,現在技術真的發展太快了。我這邊還很多東西半生不熟
呢,那邊又出現了好多有趣的新東西讓你眼紅不已。學還是不學這還真是
存在很久了,隻是沒有接觸過而已。昨天晚上看Node.js一下子看到兩點
多,感覺真是太有意思了^,有興趣的可以去看看,大家多交流交流.
好了不廢話了,在前面的示例中,幾乎全部的MyClass資訊都是通過反射得到的,但是有一個例外:
MyClass類型本身。雖然前面的示例可以動态确定MyClass的資訊,但它們仍基于以下事實:事先知道
類型名MyClass,并且在typeof語句中使用它建立一個Type對象。盡管這種方式可能在很多環境中都有
用,但是要發揮反射的全部功能,就必須能通過分析其他程式集的内容動态的擷取可用的類型。
程式集提供了它包含的類和結構的資訊。借助反射應用程式接口,可以加載程式集,擷取它的相
關資訊并建立其公共可用類型的執行個體。通過使用這種機制,程式能夠搜素其環境,利用那些潛在的功能而
無需在編譯期間顯示的定義他們。由于類型的全部資訊都可以被發現,是以不存在反射應用的内在限制。
為了擷取程式集的相關資訊,首先需要建立一個Assembly對象。Assembly類并沒有定義公有的
構造函數,它的對象執行個體是通過類的一個方法獲得的。這裡使用的LoadFrom()方法可以加載由檔案名
指定的程式集,其形式如下:
static Assembly LoadFrom(string fileName)
一旦獲得了Assembly類型的對象,就可以通過調用該對象的GetType()來得到它所定義的類型
。基本形式如下:
Type[] GetTypes()
此方法傳回一個數組,它包含了程式集的類型。
為了說明如何擷取程式集的類型,我們需要在解決方案中添加一個類庫,類庫名字為MyClasses,
在類庫中添加三個類:MyClass、AnotherClass、Demo。代碼如下:
程式集MyClasses代碼
使用反射代碼:
運作結果:
自此,反射部分基本内容寫完了.希望對大家有所幫助.現在正在進行WPF開發,我會把在項目開發中遇到的問題與解決方案及時與您分享,希望您能繼續關注.
最後,如果本文對您有所幫助,請點推薦,謝謝!