共用方式為


動態型別解析技術範例

更新:2007 年 11 月

這個範例將說明主機如何以提供事件處理常式,傳回含有要求之型別的組件 (Assembly),來參與型別解析處理序。這是進階技術,最可能在分散式應用程式中用來提供彈性和容錯能力。

如需使用這些範例的詳細資訊,請參閱下列主題:

Download sample

若要使用命令提示字元建置範例

  1. 開啟 [命令提示字元] 視窗,並巡覽至此範例的任一程式設計語言的子目錄。

  2. 根據您選擇的程式設計語言,在命令列上輸入 msbuild DynamicTypeResolveCS.sln 或 msbuild DynamicTypeResolveVB.sln。

若要使用 Visual Studio 建置範例

  1. 開啟 [Windows 檔案總管],並巡覽至此範例的任一程式設計語言的子目錄。

  2. 根據您選擇的程式設計語言,按兩下 DynamicTypeResolveCS.sln 或 DynamicTypeResolveVB.sln 檔案的圖示,在 Visual Studio 中開啟該檔案。

  3. 在 [建置] 功能表上,按一下 [建置方案]。

若要執行範例

  1. 開啟 [命令提示字元] 視窗,巡覽至已建立之可執行檔所在的目錄。

  2. 在命令列上輸入 DynamicTypeResolve.exe。

注意事項:

這個範例會建置一個主控台應用程式。您必須在命令提示字元視窗中啟動及執行,才能檢視它的輸出。

備註

此範例嘗試將一個不存在的型別執行個體化。然而,這個範例也會處理型別載入失敗,而會以動態的方式建立必要的型別,以避免 FileNotFoundException

本範例使用下列技術和類別。

  • 反映

    • AppDomain 這個類別的 AssemblyResolve 事件會用來新增事件處理常式,當型別載入失敗時便會呼叫此處理常式。

    • Activator 用來在編譯時期建立不需要知道型別名稱的執行個體。

    • MethodInfo 用來叫用方法以處理型別,編譯時並不需要知道方法的名稱。

    • AssemblyBuilder 用來在執行階段發出動態組件。

    • AssemblyName 用來定義組件的唯一識別。此範例為此型別最簡單的用法,可給予動態組件一個文字名稱。

    • ModuleBuilder 用來在動態組件中建置動態模組。

    • TypeBuilder 這個型別衍生自 Type,可用來動態建置型別。從這個型別,您可以要求 FieldBuilderConstructorBuilderMethodBuilder 等型別的執行個體。此範例使用這些型別,產生一個完整的型別。

    • MethodBuilder 用來在動態型別中定義方法。

    • ILGeneratorMethodBuilder 型別實作 GetILGenerator 方法,此方法會傳回 ILGenerator 型別的執行個體。此型別會用來以動態方式產生 Microsoft Intermediate Language (MSIL) 程式碼。

  • 委派和事件

請參閱

參考

Activator

AppDomain

AssemblyBuilder

AssemblyBuilderAccess

AssemblyName

FileNotFoundException

ILGenerator

MethodAttributes

MethodBuilder

MethodInfo

ModuleBuilder

ResolveEventHandler

System.IO

System.Reflection

System.Reflection.Emit

TypeBuilder

其他資源

反映

發出動態方法和組件

動態原始程式碼的產生和編譯

處理和引發事件

Managed 和 Unmanaged 事件