Emit基本概念介绍

对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来创建动态类型的过程有了一个简单的认识,下面将通过实践来深入理解这一过程。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

changuncle

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值