动态类型在.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) 元数据的访问)

System.Reflection.Emit.ILGenerator类提供可用于发出 Microsoft 中间语言 (MSIL) 的方法
ConstructorBuilder.GetILGenerator 方法为构造函数返回 ILGenerator
MethodBuilder.GetILGenerator 方法为方法返回 ILGenerator

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; 表示程序集可以被卸载并且内存会被回收

最新文章

  1. 如何在Windows上从源码编译Chromium (CEF3) 加入mp3支持
  2. cout中的执行顺序_a++和++a
  3. WebApi 2:属性路由 [Route()],attribute routing
  4. ASP.NET WebForm与MVC优缺点
  5. Php中正则小结(一)
  6. (转)Linux: su sudo sudoer
  7. 【原创】QT编程 多线程
  8. 两个string数组对应比较
  9. jTDS驱动兼容性问题
  10. MySQL5.5安装出现CMake错误找不到CMakelists.txt原因
  11. 洛谷P1333 瑞瑞的木棍(欧拉回路)
  12. 停止Monkey
  13. UIView和layer的区别
  14. android学习:apiDemos导入时R.java无法生成的问题
  15. dubbo超时优先级设置
  16. springboot 停止
  17. 这篇说的是Unity Input 输入控制器
  18. JS 数组对象根据下标拆分成新的数组
  19. python内置函数大全(分类)
  20. Sql语法高级应用之七:如何在存储过程中使用事务

热门文章

  1. native方法
  2. 双口RAM,值得研究
  3. 如何通过.Net Compact Framework来获得应用程序的当前路径
  4. 设计模式-访问者(Visitor)模式
  5. node的socket.io的之基本使用方法.
  6. 安装FFmpeg3.0.9
  7. Java中的构造方法总结
  8. Java对象和它的内存管理
  9. 2018-2019-2 《网络对抗技术》Exp7 网络欺诈防范 Week10 20165233
  10. Python小知识点(4)--模块相关