Emit基本概念介绍

来源:互联网 发布:java 反射获取运行时 编辑:程序博客网 时间:2024/06/09 14:27

对Emit、AOP感兴趣很久了,最近终于有时间研究一下,所以就开始学习,网上还是高人多(尤其是在2010年之前就混IT界的),查了一些资料对Emit也算是了解了一点点,总结下来跟大家分享一下。

什么是反射发出(Reflection Emit)

说到反射大家应该都不陌生,反射是在运行时发现对象的相关信息,并且执行这些对象(创建对象实例,执行对象中的方法),简单地说反射不仅允许你浏览一个程序集暴露的类、方法、属性、字段,而且允许你创建一个类型的实例以及执行实例中的方法(调用成员)。但.NET的反射机制并没有到此结束,反射还允许你在运行时构建一个程序集,并且可以创建全新的类型,这就是反射发出(Reflection Emit),Emit应该是反射中一个比较高级的功能。
使用Emit可以从零开始,动态的构造程序集和类型,在需要时动态生成代码,提高程序的灵活性。有了这些功能,我们可以用其来实现一些典型的应用:

  • 动态代理(AOP)
  • 减少反射的性能损失(Dynamic Method等)
  • ORM的实现
  • 工具及IDE插件的开发
  • 公共代码安全模块开发

使用Emit的完整流程

使用Emit一般包括以下步骤:

1) 创建一个新的程序集(可以选择存在内存中或持久化到硬盘)

2) 在程序集内创建一个模块

3) 在模块内创建动态类

4) 在动态类中添加动态方法、属性、事件等

5) 生产相关的IL代码

6) 返回创建出来的类型或持久化到硬盘

如果只是想创建一个Dynamic Method那么可以直接使用DynamicMethod类来创建动态方法,并在构造函数时传入它所依附的类或者模块。看了这个流程相信大家对使用Emit来创建动态类型的过程有了一个简单的认识,下面将通过实践来深入理解这一过程。

1 0
原创粉丝点击