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; 表示程序集可以被卸载并且内存会被回收
System.Reflection.Emit摘记的更多相关文章
- System.Reflection.Emit学习
C#反射发出System.Reflection.Emit学习 分享: 1 一.System.Reflection.Emit概述 Emit,可以称为发出或者产生.与Emit相关的类基本都存在于Syste ...
- C#反射发出System.Reflection.Emit学习
一.System.Reflection.Emit概述 Emit,可以称为发出或者产生.与Emit相关的类基本都存在于System.Reflection.Emit命名空间下.反射,我们可以取得形如程序集 ...
- [EF] - 动态创建模型:System.Reflection.Emit + Code First
动态创建Entity Framework模型并且创建数据库 使用System.Reflection.Emit+Code First model创建以下的一个实体类和DbContext并且创建数据库: ...
- [读行者][学习LinqExpression和Reflection(Emit)]阅读TypeBuilderSample之ExampleFromTheArticle
前言 关于”读行者“ 俗语有云:"读万卷书,行万里路“.多读一些优秀代码,不仅可以锻炼我们读代码的能力(便于维护或相互交流),还可以吸取很多我们成长所需的知识点.多读,才能开阔我们的眼界,才 ...
- 利用.NET Core类库System.Reflection.DispatchProxy实现简易Aop
背景 Aop即是面向切面编程,众多Aop框架里Castle是最为人所知的,另外还有死去的Spring.NET,当然,.NET Core社区新秀AspectCore在性能与功能上都非常优秀,已经逐渐被社 ...
- Could not load type 'System.Reflection.AssemblySignatureKeyAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c
错误: Could not load type 'System.Reflection.AssemblySignatureKeyAttribute' from assembly 'mscorlib, V ...
- 异常:“System.Reflection.Metadata”已拥有为“System.Collections.Immutable”定义的依赖项
参考动态执行T4模板:https://msdn.microsoft.com/zh-cn/library/bb126579.aspx 我项目是.NET Framework 4.5控制台应用程序写的. 执 ...
- 【C#基础】System.Reflection (反射)
在使用.NET创建的程序或组件时,元数据(metadata)和代码(code)都存储于"自成一体"的单元中,这个单元称为装配件.我们可以在程序运行期间访问这些信息.在System. ...
- [转]System.Reflection.AssemblySignatureKeyAttribute
转自:http://www.cnblogs.com/ego/p/3321122.html 错误: Could not load type 'System.Reflection.AssemblySign ...
随机推荐
- php处理字符串格式的计算表达式
有时候我们对每一种产品都有一个提成公式,而这个计算提成的公式是以字符串格式存在表中的 当我们用这个计算公式时,他并不像我们写的:$a=2+3*5;这样简单的能计算出结果,而它是个字符串 所以,我们就必 ...
- Oracle事务的ACID特性
Oracle事务的ACID特性 1.原子性(Atomicity) 事务的原子性是指事务中包含的所有操作要么都做,要么都不做,保证数据库是一致的. 例如:A帐户向B帐户划账1000,则先将A减少1000 ...
- 【转】挟天子以令诸侯博客关于TCP/IP模型与OSI模型的区别
挟天子以令诸侯 博客园 首页 新随笔 联系 订阅 管理 随笔 - 21 文章 - 0 评论 - 9 TCP/IP四层模型与OSI参考模型 TCP/IP四层模型: 1.链路层(数据链路层/网络接 ...
- struts2学习(10)struts2国际化
一.国际化简介: 二.struts2国际化设置: struts.xml: <?xml version="1.0" encoding="UTF-8" ?&g ...
- Java-Runoob-高级教程:Java 序列化
ylbtech-Java-Runoob-高级教程:Java 序列化 1.返回顶部 1. Java 序列化 Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个字节序列,该字节序列包 ...
- excel打开csv 出现乱码怎么解决
CSV是逗号分隔值的英文缩写,通常都是纯文本文件.CSV格式是分隔的数据格式,有字段/列分隔的逗号字符和记录/行分隔换行符.通常CSV文件可以用EXCEL正常打开,但是许多人都有这样的经历,使用EXC ...
- Hive语句执行优化-简化UDF执行过程
Hive会将执行的SQL语句翻译成对应MapReduce任务,当SQL语句比较简单时,性能还是可能处于可接受的范围.但是如果涉及到非常复杂的业务逻辑,特别是通过程序的方式(一些模版语言生成)生成大 ...
- 启动 Eclipse 报错 “An internal error occurred during: "Initializing Java Tooling". java.lang.NullPointerException”
之前在线升级了Eclipse,由于网络/或者是设置问题,在升级完成后启动Eclipse出线上述错误... 解决方法 1. 删除目录工作目录下面的.project文件夹: 如下图: 2. 关闭Eclip ...
- 使用SpringData出现java.lang.AbstractMethodError
最近学习一下SpringData,在添加SpringData支持的时候,出现了这样的问题: SpringData需要的jar有:spring-data-jpa.jar spring-data-com ...
- oracle autotrace使用
通过以下方法可以把Autotrace的权限授予Everyone, 如果你需要限制Autotrace权限,可以把对public的授权改为对特定user的授权. D:\oracle\ora92>sq ...