反映

System.Reflection 命名空間中的類別,連同 System.Type,可讓您取得已載入組件及組件中所定義型別的相關資訊,例如類別介面實值型別。 您也可以使用反映,在執行階段建立型別執行個體,並叫用 (Invoke) 和存取它們。 如需有關反映之特定層面的主題,請參閱本概觀結尾的相關主題。

Common Language Runtime 載入器可管理應用程式定義域,這些定義域可在具有相同應用程式範圍的物件周圍構成定義的界限。 這個管理包括載入各個組件至適當應用程式定義域,和控制各個組件內型別階層架構的記憶體配置。

組件包含模組,模組包含型別,而型別包含成員。 反映提供封裝組件、模組和型別的物件。 您可以使用反映,動態建立型別的執行個體、繫結型別至現有物件,或從現有物件取得型別。 您可以接著叫用型別的方法,或存取它的欄位和屬性。 反映的一般用法如下所示:

  • 使用 Assembly 定義並載入組件、載入組件資訊清單 (Assembly Manifest) 中列出的模組,和從這個組件找出型別並建立它的執行個體。

  • 使用 Module 探索資訊,例如包含模組和模組中類別的組件。 您也可以取得所有全域方法或是在模組上定義的其他特定非全域方法。

  • 使用 ConstructorInfo 來探索資訊,例如建構函式的名稱、參數、存取修飾詞 (例如 public 或 private) 和實作詳細資料 (例如 abstract 或 virtual)。 使用 TypeGetConstructorsGetConstructor 方法叫用特定建構函式。

  • 使用 MethodInfo 來探索資訊,例如方法的名稱、傳回型別、參數、存取修飾詞 (例如 public 或 private) 和實作詳細資料 (例如 abstract 或 virtual)。 使用 TypeGetMethodsGetMethod 方法叫用特定方法。

  • 使用 FieldInfo 來探索資訊,例如欄位的名稱、存取修飾詞 (例如 public 或 private) 和實作詳細資料 (例如 static),以及取得或設定欄位值。

  • 使用 EventInfo 探索資訊,例如名稱、事件處理常式資料型別、自訂屬性、宣告型別和事件的反映型別,並加入或移除事件處理常式。

  • 使用 PropertyInfo 探索資訊,例如名稱、資料型別、宣告型別、反映型別和屬性的唯讀或可寫入狀態,並取得或設定屬性值。

  • 使用 ParameterInfo 探索資訊,例如參數的名稱、資料型別、參數是否為輸入或輸出參數,和方法簽章 (Signature) 中參數的位置。

  • 使用 CustomAttributeData 探索在應用程式定義域的僅限反映內容中工作時,關於自訂屬性的資訊。 CustomAttributeData 讓您可以檢查屬性,而不需要建立這些屬性的執行個體。

System.Reflection.Emit 命名空間的類別提供反映的特殊形式,允許您在執行階段建置型別。

反映也可以用來建立稱為型別瀏覽器的應用程式,允許使用者選取型別並接著檢視那些型別的資訊。

反映還有其他用法。 語言編譯器,例如 JScript,會使用反映建構符號表。 System.Runtime.Serialization 命名空間中的類別會使用反映存取資料,並判斷哪個欄位要保存 (Persist)。 System.Runtime.Remoting 命名空間中的類別會透過序列化 (Serialization) 間接使用反映。

相關主題

標題

說明

反映中的執行階段型別

描述內部型別,例如 RuntimeType,這類型別會繼承 System.Reflection 命名空間中的抽象類別,並提供許多這些類別的實作。

檢視型別資訊

描述 Type 類別,並提供程式碼範例,以說明如何將 Type 與數種反映類別一起使用,以取得與建構函式、方法、欄位、屬性和事件有關的資訊。

反映和泛用型別

說明反映將如何處理泛型型別和泛型方法的型別參數及型別引數。

Reflection 類別所使用的設計模式

提供表格,顯示命名模式的方法和最常使用的 reflection 類別用法,例如 ModuleTypeMemberInfo 類別。

反映的安全性考量

描述規則,判斷可使用反映來探索型別資訊並存取型別所到達的程度。

動態載入和使用型別

描述支援晚期繫結的反映自訂繫結介面。

HOW TO:將組件載入僅限反映的內容

描述僅限反映的載入內容。 示範如何載入組件、如何測試內容,以及如何檢查套用到僅限反映的內容中之組件的屬性。

存取預設成員

示範如何使用反映來存取類別可能具有的預設成員。

存取預設引數值

示範如何使用反映來存取具有預設值的引數,及如何以預設值叫用具有引數的方法。

存取自訂屬性

示範使用反映查詢屬性 (Attribute) 的存在和值。

指定完整的型別名稱

描述依據 Backus-Naur 格式 (BNF) 的完整型別名稱格式,和指定特殊字元、組件名稱、指標、參考和陣列所需的語法。

Unmanaged 反映 API

描述何處可以找到與使用 Unmanaged 反映來檢查中繼資料有關的資訊。

HOW TO:使用反映連結委派

說明如何建立方法的委派,以及將此委派連結到事件。 說明如何在執行階段使用 DynamicMethod 來建立事件處理方法。

發出動態方法和組件

說明如何產生動態組件和動態方法。

參考資料

System.Type

System.Reflection

System.Reflection.Emit

回到頁首