動態型別解析技術範例
更新:2007 年 11 月
這個範例將說明主機如何以提供事件處理常式,傳回含有要求之型別的組件 (Assembly),來參與型別解析處理序。這是進階技術,最可能在分散式應用程式中用來提供彈性和容錯能力。
如需使用這些範例的詳細資訊,請參閱下列主題:
若要使用命令提示字元建置範例
開啟 [命令提示字元] 視窗,並巡覽至此範例的任一程式設計語言的子目錄。
根據您選擇的程式設計語言,在命令列上輸入 msbuild DynamicTypeResolveCS.sln 或 msbuild DynamicTypeResolveVB.sln。
若要使用 Visual Studio 建置範例
開啟 [Windows 檔案總管],並巡覽至此範例的任一程式設計語言的子目錄。
根據您選擇的程式設計語言,按兩下 DynamicTypeResolveCS.sln 或 DynamicTypeResolveVB.sln 檔案的圖示,在 Visual Studio 中開啟該檔案。
在 [建置] 功能表上,按一下 [建置方案]。
若要執行範例
開啟 [命令提示字元] 視窗,巡覽至已建立之可執行檔所在的目錄。
在命令列上輸入 DynamicTypeResolve.exe。
注意事項: |
---|
這個範例會建置一個主控台應用程式。您必須在命令提示字元視窗中啟動及執行,才能檢視它的輸出。 |
備註
此範例嘗試將一個不存在的型別執行個體化。然而,這個範例也會處理型別載入失敗,而會以動態的方式建立必要的型別,以避免 FileNotFoundException。
本範例使用下列技術和類別。
反映
AppDomain 這個類別的 AssemblyResolve 事件會用來新增事件處理常式,當型別載入失敗時便會呼叫此處理常式。
Activator 用來在編譯時期建立不需要知道型別名稱的執行個體。
MethodInfo 用來叫用方法以處理型別,編譯時並不需要知道方法的名稱。
AssemblyBuilder 用來在執行階段發出動態組件。
AssemblyName 用來定義組件的唯一識別。此範例為此型別最簡單的用法,可給予動態組件一個文字名稱。
ModuleBuilder 用來在動態組件中建置動態模組。
TypeBuilder 這個型別衍生自 Type,可用來動態建置型別。從這個型別,您可以要求 FieldBuilder、ConstructorBuilder 和 MethodBuilder 等型別的執行個體。此範例使用這些型別,產生一個完整的型別。
MethodBuilder 用來在動態型別中定義方法。
ILGeneratorMethodBuilder 型別實作 GetILGenerator 方法,此方法會傳回 ILGenerator 型別的執行個體。此型別會用來以動態方式產生 Microsoft Intermediate Language (MSIL) 程式碼。
委派和事件
- ResolveEventHandler 當型別解析失敗時,用於表示要呼叫的回呼方法。