顯示具有 DotNetFramework-反射(Reflection) 標籤的文章。 顯示所有文章
顯示具有 DotNetFramework-反射(Reflection) 標籤的文章。 顯示所有文章

2012年3月21日 星期三

認識反射

Reflection ,一般稱為「反映」或「反射」,反射系統提供了瀏覽和檢測資料型別的功能。 通常,我們在使用型別資料的時候,順序大都是先取得型別參考,然後建立instance,再叫用其已知的屬性或方法。 Reflection 則可以動態載入組件,再檢測該型別中有哪些的屬性或方法,再進而呼叫使用。

例如,一些外掛(plug-in)的組件,系統開發階段根本不知道會遇到什麼外掛組件,那要如何存取型別? 通常就是透過 Reflection 動態載入組件,再將組件中的型別繫結給已知的物件,進而叫用其方法(method)或存取其屬性(property)。

反射組件的屬性

當我們設計一個組件時,除了類別的定義之外,還有一些額外的資訊是不包含在類別之中的,例如:版本編號,作者,公司資訊等等。 這些資訊統稱組件屬性,也就是前一節介紹的組件中繼資料。 欲編輯這些資訊可以在專案中開啟 AssemblyInfo 這個檔案,它就是用來儲存組件屬性的設定檔。(C#的檔案名稱為 AssemblyInfo.cs;VB的檔案名稱為 AssemblyInfo.vb)

反射組件的型別

前面章節,已經說明了組件與模組的用法,接下來要說明的是型別的反射。

取得型别 (Type)

要取得一個型別物件 ( Type ),可透過以下幾個方式:

動態載入組件

在瞭解組件的相關資訊後,本章節接著要探討的是,一個組件在沒有事先被參考的前題下,如何被動態載入與執行。

動態建立組件

反射不僅可以檢測已經存在的組件的型別資訊,也可以在執行階段,自行定義組件資訊,並回存到磁碟以重複使用。