咨詢電話:023-6276-4481
    熱門(mén)文章
                    
電 話:023-6276-4481
                
郵箱:broiling@qq.com
地址:重慶市南岸區(qū)亞太商谷6幢25-2
1、反射的作用 a、使用 Assembly 定義和加載程序集,加載在程序集清單中列出的模塊 b、使用 Module 了解模塊的程序集以及模塊中的類的信息 c、使用 ConstructorInfo 了解類的構(gòu)造函數(shù)的名稱、參數(shù)、訪問(wèn)修飾符和實(shí)現(xiàn)的詳細(xì)信息 d、使用 MethodInfo 了解方法的名稱、返回類型、參數(shù)、訪問(wèn)修飾符和實(shí)現(xiàn)詳細(xì)詳細(xì)(abstract或virtual) e、使用 FieldInfo 了解方法的名稱、訪問(wèn)修飾符和實(shí)現(xiàn)詳細(xì)信息 f、使用 EventInfo 來(lái)了解事件的名稱、事件處理程序數(shù)據(jù)類型、自定義屬性、聲明類型和反射類型 g、使用 PRopertyInfo 來(lái)了解屬性的名稱、數(shù)據(jù)類型、聲明類型、反射類型和只讀或可寫(xiě)狀態(tài) h、使用 ParameterInfo 來(lái)了解參數(shù)的名稱、數(shù)據(jù)類型、參數(shù)是輸入?yún)?shù)還是輸出參數(shù),以及參數(shù)在方法簽名中的位置
1、通過(guò) AppDomain 對(duì)象的DefineDynamicAssembly 方法創(chuàng)建一個(gè)程序集框架
AppDomain domain = AppDomain.CurrentDomain; AssemblyName assemblyName = new AssemblyName(); assemblyName.Name = "DynamicAssembly"; AssemblyBuilder newAssembly = domain.DefineDynamicAssembly(assemblyName,AssemblyBuilderaccess.Run); ModuleBuilder newModule = newAssembly.DefineDynamicModule("SayHello"); TypeBuilder classType = newModule.DefineType("MySayHello",TypeAttributes.Public); classType.IsClass = true; classType.AddInterfaceImplementation(typeof(ISayHello)); Type[] paramTypes = new Type[0]; Type returnType = typeof(int); MethodBuilder simpleMethod = classType.DefineMethod("SayHello",MethodAttributes.Public | MethodAttributes.Virtual,returnType,paramTypes); ILGenerator generator = simpleMethod.GetILGenerator();
2、為方法添加代碼
generator.Emit(OpCodes.Ldc_I4,1);//利用 Emit 方法直接寫(xiě)偽代碼,將 1 壓入堆棧 generator.Emit(OpCodes.Ret);//返回棧頂元素 generator.EmitWriteLine("Hello");//IL 寫(xiě)入方法 DeclareLocal、DefineLabel、EmitWriteLine
3、將類型寫(xiě)入程序集
classType.CreateType();
| 源代碼元素的類型 | 代表性 CodeDOM 元素 | 
|---|---|
| 源代碼文檔或代碼段 | CodeCompileUnit | 
| 命名空間聲明 | CodeNamespace | 
| 命名空間聲明集合 | CodeNamespaceCollection | 
| 命名空間導(dǎo)入 | CodeNamespaceImport | 
| 命名空間導(dǎo)入集合 | CodeNamespaceImportCollection | 
| 類、結(jié)構(gòu)或枚舉的類型聲明 | CodeTypeDeclaration | 
| 類型聲明集合 | CodeTypeDeclarationCollection | 
| 類型成員的抽象基類 | CodeTypeMember | 
| 類型成員集合 | CodeMemberMethod | 
| 類字段聲明 | CodeMemberField | 
| 類屬性聲明 | CodeMemberProperty | 
| 類型的構(gòu)造函數(shù) | CodeConstructor | 
| 類型的靜態(tài)構(gòu)造函數(shù) | CodeTypeConstructor | 
| 程序入口點(diǎn) | CodeEntryPoint | 
| CodeTypeMember 使用的標(biāo)識(shí)符屬性 | MemberAttributes | 
| 對(duì)類型的引用 | CodeTypeReference | 
| 對(duì)類型的引用集合 | CodeTypeReferenceCollection | 
| 自定義屬性聲明 | CodeAttributeDeclaration | 
| 自定義屬性聲明集合 | CodeAttributeDeclarationCollection | 
| 參數(shù)聲明 | CodeParameterDeclarationExpression | 
| 參數(shù)聲明集合 | CodeParameterDeclarationExpressionCollection | 
| 自定義屬性的參數(shù) | CodeAttributeArgument | 
| 自定義屬性的參數(shù)集合 | CodeAttributeArgumentCollection | 
| 方向表達(dá)式 | CodeDirectionExpression | 
| 參數(shù)的方向 | FieldDirection | 
| 語(yǔ)句的抽象基類 | CodeStatement | 
| 代碼語(yǔ)句集合 | CodeStatementCollection | 
| 代碼語(yǔ)句的代碼表達(dá)式 | CodeExpressionStatement | 
| 變量聲明語(yǔ)句 | CodeVariableDeclarationStatement | 
| 賦值語(yǔ)句 | CodeAssignStatement | 
| 二元運(yùn)算符表達(dá)式 | CodeBinaryOperatorExpression | 
| 二元運(yùn)算符的類型 | CodeBinaryOperatorType | 
| 注釋 | CodeStatement | 
| 注釋語(yǔ)句 | CodeCommentStatement | 
| 注釋語(yǔ)句集合 | CodeCommentStatementCollection | 
| 類事件聲明 | CodeMemberEvent | 
| 委托聲明 | CodeTypeDelegate | 
| 創(chuàng)建委托的表達(dá)式 | CodeDelegateCreateExpression | 
| 調(diào)用委托的表達(dá)式 | CodeDelegateInvokeExpression | 
| 為事件附加委托的語(yǔ)句 | CodeAttachEventStatement | 
| throw 異常語(yǔ)句 | CodeThrowExceptionStatement | 
| try…catch…finally 代碼塊 | CodeTryCatchFinallyStatement | 
| catch 語(yǔ)句 | CodeCatchClause | 
| catch 語(yǔ)句塊 | CodeCatchClauseCollection | 
| if 語(yǔ)句 | CodeConditionStatement | 
| for 循環(huán)語(yǔ)句 | CodeIterationStatement | 
| goto 語(yǔ)句 | CodeGotoStatement | 
| 返回值語(yǔ)句 | CodeMethodReturnStatement | 
| 標(biāo)記語(yǔ)句 | CodeLabeledStatement | 
| 表達(dá)式的抽象基類 | CodeExpression | 
| 代碼表達(dá)式集合 | CodeExpressionCollection | 
| 將對(duì)象或表達(dá)式強(qiáng)制轉(zhuǎn)換為數(shù)據(jù)類型的表達(dá)式 | CodeCastExpression | 
| 基元值表達(dá)式 | CodePrimitiveExpression | 
| typeof 表達(dá)式 | CodeTypeOfExpression | 
| 數(shù)組索引器 | CodeArrayIndexerExpression | 
| 對(duì)參數(shù)的引用 | CodeArgumentReferenceExpression | 
| 對(duì)變量的引用 | CodeVariableReferenceExpression | 
| 引用類型的表達(dá)式 | CodeTypeReferenceExpression | 
| 屬性集的值參數(shù)表達(dá)式 | CodePropertySetValueReferenceExpression | 
| 創(chuàng)建對(duì)象的表達(dá)式 | CodeObjectCreateExpression | 
| 創(chuàng)建數(shù)組的表達(dá)式 | CodeArrayCreateExpression | 
| 調(diào)用方法的表達(dá)式 | CodeMethodInvokeExpression | 
| 類型索引器 | CodeIndexerExpression | 
| 對(duì)基類的引用 | CodeBaseReferenceExpression | 
| 對(duì)字段的引用 | CodeFieldReferenceExpression | 
| 對(duì)方法的引用 | CodeMethodReferenceExpression | 
| 對(duì)屬性的引用 | CodePropertyReferenceExpression | 
| 對(duì)事件的引用 | CodeEventReferenceExpression | 
| 對(duì)當(dāng)前對(duì)象的引用 | CodeThisReferenceExpression | 
| 可編譯的文件代碼單元 | CodeSnippetCompileUnit | 
| 類成員的文本元素 | CodeSnippetTypeMember | 
| 表達(dá)式的文本代碼元素 | CodeSnippetExpression | 
| CodeDOM 對(duì)象的抽象基類 | CodeObject | 
| 表示包含文件名和行號(hào)的位置 | CodeLinePragma |