国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

.NET 程序集高級技術與動態產生和編譯源代碼

2019-11-14 11:20:28
字體:
來源:轉載
供稿:網友

.NET 程序集高級技術與動態產生和編譯源代碼

一、反射

1、反射的作用  a、使用 Assembly 定義和加載程序集,加載在程序集清單中列出的模塊  b、使用 Module 了解模塊的程序集以及模塊中的類的信息  c、使用 ConstructorInfo 了解類的構造函數的名稱、參數、訪問修飾符和實現的詳細信息  d、使用 MethodInfo 了解方法的名稱、返回類型、參數、訪問修飾符和實現詳細詳細(abstract或virtual)  e、使用 FieldInfo 了解方法的名稱、訪問修飾符和實現詳細信息  f、使用 EventInfo 來了解事件的名稱、事件處理程序數據類型、自定義屬性、聲明類型和反射類型  g、使用 PRopertyInfo 來了解屬性的名稱、數據類型、聲明類型、反射類型和只讀或可寫狀態  h、使用 ParameterInfo 來了解參數的名稱、數據類型、參數是輸入參數還是輸出參數,以及參數在方法簽名中的位置

二、動態創建程序集

1、通過 AppDomain 對象的DefineDynamicAssembly 方法創建一個程序集框架

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 方法直接寫偽代碼,將 1 壓入堆棧generator.Emit(OpCodes.Ret);//返回棧頂元素generator.EmitWriteLine("Hello");//IL 寫入方法 DeclareLocal、DefineLabel、EmitWriteLine

3、將類型寫入程序集

classType.CreateType();

三、代碼文檔對象模型 CodeDOM

源代碼元素的類型 代表性 CodeDOM 元素
源代碼文檔或代碼段 CodeCompileUnit
命名空間聲明 CodeNamespace
命名空間聲明集合 CodeNamespaceCollection
命名空間導入 CodeNamespaceImport
命名空間導入集合 CodeNamespaceImportCollection
類、結構或枚舉的類型聲明 CodeTypeDeclaration
類型聲明集合 CodeTypeDeclarationCollection
類型成員的抽象基類 CodeTypeMember
類型成員集合 CodeMemberMethod
類字段聲明 CodeMemberField
類屬性聲明 CodeMemberProperty
類型的構造函數 CodeConstructor
類型的靜態構造函數 CodeTypeConstructor
程序入口點 CodeEntryPoint
CodeTypeMember 使用的標識符屬性 MemberAttributes
對類型的引用 CodeTypeReference
對類型的引用集合 CodeTypeReferenceCollection
自定義屬性聲明 CodeAttributeDeclaration
自定義屬性聲明集合 CodeAttributeDeclarationCollection
參數聲明 CodeParameterDeclarationExpression
參數聲明集合 CodeParameterDeclarationExpressionCollection
自定義屬性的參數 CodeAttributeArgument
自定義屬性的參數集合 CodeAttributeArgumentCollection
方向表達式 CodeDirectionExpression
參數的方向 FieldDirection
語句的抽象基類 CodeStatement
代碼語句集合 CodeStatementCollection
代碼語句的代碼表達式 CodeExpressionStatement
變量聲明語句 CodeVariableDeclarationStatement
賦值語句 CodeAssignStatement
二元運算符表達式 CodeBinaryOperatorExpression
二元運算符的類型 CodeBinaryOperatorType
注釋 CodeStatement
注釋語句 CodeCommentStatement
注釋語句集合 CodeCommentStatementCollection
類事件聲明 CodeMemberEvent
委托聲明 CodeTypeDelegate
創建委托的表達式 CodeDelegateCreateExpression
調用委托的表達式 CodeDelegateInvokeExpression
為事件附加委托的語句 CodeAttachEventStatement
throw 異常語句 CodeThrowExceptionStatement
try…catch…finally 代碼塊 CodeTryCatchFinallyStatement
catch 語句 CodeCatchClause
catch 語句塊 CodeCatchClauseCollection
if 語句 CodeConditionStatement
for 循環語句 CodeIterationStatement
goto 語句 CodeGotoStatement
返回值語句 CodeMethodReturnStatement
標記語句 CodeLabeledStatement
表達式的抽象基類 CodeExpression
代碼表達式集合 CodeExpressionCollection
將對象或表達式強制轉換為數據類型的表達式 CodeCastExpression
基元值表達式 CodePrimitiveExpression
typeof 表達式 CodeTypeOfExpression
數組索引器 CodeArrayIndexerExpression
對參數的引用 CodeArgumentReferenceExpression
對變量的引用 CodeVariableReferenceExpression
引用類型的表達式 CodeTypeReferenceExpression
屬性集的值參數表達式 CodePropertySetValueReferenceExpression
創建對象的表達式 CodeObjectCreateExpression
創建數組的表達式 CodeArrayCreateExpression
調用方法的表達式 CodeMethodInvokeExpression
類型索引器 CodeIndexerExpression
對基類的引用 CodeBaseReferenceExpression
對字段的引用 CodeFieldReferenceExpression
對方法的引用 CodeMethodReferenceExpression
對屬性的引用 CodePropertyReferenceExpression
對事件的引用 CodeEventReferenceExpression
對當前對象的引用 CodeThisReferenceExpression
可編譯的文件代碼單元 CodeSnippetCompileUnit
類成員的文本元素 CodeSnippetTypeMember
表達式的文本代碼元素 CodeSnippetExpression
CodeDOM 對象的抽象基類 CodeObject
表示包含文件名和行號的位置 CodeLinePragma

上一篇:bat批處理腳本學習

下一篇:輸出和輸入

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通道| 唐海县| 广德县| 韶山市| 大理市| 安远县| 柳林县| 公安县| 萝北县| 雅安市| 西丰县| 从化市| 工布江达县| 理塘县| 杭锦旗| 乌拉特中旗| 本溪市| 宜兰县| 合肥市| 姜堰市| 元氏县| 石河子市| 华池县| 大同县| 砀山县| 宜良县| 长沙市| 玉龙| 浙江省| 三明市| 法库县| 平谷区| 兴隆县| 尼勒克县| 天津市| 咸丰县| 巴林右旗| 九龙城区| 正安县| 噶尔县| 正安县|