天天看點

C#基礎知識回顧-- 反射(4)

從程式集獲得類型

  先說點題外話,現在技術真的發展太快了。我這邊還很多東西半生不熟

呢,那邊又出現了好多有趣的新東西讓你眼紅不已。學還是不學這還真是

存在很久了,隻是沒有接觸過而已。昨天晚上看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代碼

使用反射代碼:

運作結果:

C#基礎知識回顧-- 反射(4)

  自此,反射部分基本内容寫完了.希望對大家有所幫助.現在正在進行WPF開發,我會把在項目開發中遇到的問題與解決方案及時與您分享,希望您能繼續關注.

  最後,如果本文對您有所幫助,請點推薦,謝謝!

繼續閱讀