System.Reflection.Emit摘記

動態類型在.net中都是用什麼類型來表示的。
程序集:System.Reflection.Emit.AssemblyBuilder(定義並表示動態程序集)
構造函數:System.Reflection.Emit.ConstructorBuilder(定義並表示動態類的構造函數)
自定義屬性:System.Reflection.Emit.CustomAttributeBuilder(幫助生成自定義屬性 使用構造函數傳遞的參數來生成類的屬性)
枚舉:System.Reflection.Emit.EnumBuilder(說明並表示枚舉類型)
事件:System.Reflection.Emit.EventBuilder(定義類的事件)
字段:System.Reflection.Emit.FieldBuilder(定義並表示字段。沒法繼承此類)
局部變量:System.Reflection.Emit.LocalBuilder(表示方法或構造函數內的局部變量)
方法:System.Reflection.Emit.MethodBuilder(定義並表示動態類的方法(或構造函數))
模塊:System.Reflection.Emit.ModuleBuilder(定義和表示動態程序集中的模塊)
參數:System.Reflection.Emit.ParameterBuilder(建立或關聯參數信息 如:方法參數,事件參數等)
屬性:System.Reflection.Emit.PropertyBuilder(定義類型的屬性 (Property))
類:System.Reflection.Emit.TypeBuilder(在運行時定義並建立類的新實例)函數

 

動態類型的使用類型
類:使用System.Type(任什麼時候候都是反射出類型進行使用,難道不是嗎?)
構造函數:System.Reflection.ConstructorInfo(發現類構造函數的屬性並提供對構造函數元數據的訪問權)
事件:System.Reflection.EventInfo(發現事件的屬性並提供對事件元數據的訪問權)
字段:System.Reflection.FieldInfo(發現字段屬性並提供對字段元數據的訪問權)
方法:System.Reflection.MemberInfo(獲取有關成員屬性的信息並提供對成員元數據的訪問)
成員:System.Reflection.MemberInfo(獲取有關成員屬性的信息並提供對成員元數據的訪問)
參數:System.Reflection.ParameterInfo(發現參數屬性並提供對參數元數據的訪問)
屬性:System.Reflection.PropertyInfo (發現屬性 (Property) 的屬性 (Attribute) 並提供對屬性 (Property) 元數據的訪問)ui

 

System.Reflection.Emit.ILGenerator類提供可用於發出 Microsoft 中間語言 (MSIL) 的方法
ConstructorBuilder.GetILGenerator 方法爲構造函數返回 ILGenerator
MethodBuilder.GetILGenerator 方法爲方法返回 ILGenerator.net

ILGenerator的主要提供那些功能呢?
1.使用ILGenerator.Emit 方法的不一樣形式發出各類指令。這些指令將根據指令的類型帶不一樣類別的操做數。(該方法將會是使用的很是多的方法)
2.ILGenerator.DefineLabel方法聲明標籤和ILGenerator.MarkLabel方法標記標籤在MSIL流的當前位置。
3.ILGenerator.ThrowException方法用來發出引起異常的指令。
4.定義異常模塊
(1)ILGenerator.BeginExceptionBlock 開始異常塊。
(2)ILGenerator.BeginExceptFilterBlock 開始篩選的異常處理程序。
(3)ILGenerator.BeginCatchBlock 開始類型化異常處理程序。
(4)ILGenerator.BeginFinallyBlock 開始 finally 處理程序。
(5)ILGenerator.BeginFaultBlock 開始錯誤處理程序。
(6)ILGenerator.EndExceptionBlock 結束異常塊。
5.定義詞法範圍
(1)ILGenerator.BeginScope 開始詞法範圍
(2)ILGenerator.EndScope 結束詞法範圍
6.ILGenerator.DeclareLocal定義局部變量繼承

 

動態程序集構造訪問的幾種限制:
AssemblyBuilderAccess.Run; 表示程序集可被執行,但不能被保存
AssemblyBuilderAccess.Save; 表示程序集可被保存,但不能被執行
AssemblyBuilderAccess.RunAndSave; 表示程序集可被保存並能被執行
AssemblyBuilderAccess.ReflectionOnly; 表示程序集只能用於反射上下文環境中,不能被執行
AssemblyBuilderAccess.RunAndCollect; 表示程序集能夠被卸載而且內存會被回收事件

相關文章
相關標籤/搜索