• 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) 元数据的访问)

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

  • 相关阅读:
    SQL SERVER没有足够的内存继续执行程序 (MSCORLIB)的解决办法
    Python之数据分析
    python之爬虫
    Linux从入门到放弃(为做一个开发+运维的全能性人才而奋斗)
    从零开始学python
    VUE学习
    Python进阶
    MySQL系列
    python基础其他
    Microsoft Office 2010/2013安装组件预设
  • 原文地址:https://www.cnblogs.com/shijun/p/6374987.html
Copyright © 2020-2023  润新知