咨詢電話: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 |