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

Emit基本概念介绍相关推荐

  1. cocos2d-x一些核心概念介绍

    cocos2d-x一些核心概念介绍 Cocos2d-x中有很多概念,这些概念很多来源于动画.动漫和电影等行业,例如:导演.场景和层等概念,当然也有些有传统的游戏的概念.Cocos2d-x中核心概念:导 ...

  2. FPGA之道(75)静态时序分析(一)基本概念介绍

    文章目录 前言 基本概念介绍 常用时间参数介绍 tsu 建立时间要求 建立时间余量 th 保持时间要求 保持时间余量 tco Maximum frequency (or Minimum period) ...

  3. Lesson 13.2 模型拟合度概念介绍与欠拟合模型的结构调整策略

    一.模型拟合度概念介绍与实验 1.测试集的"不可知"悖论   通过此前课程内容介绍,我们已经知道了机器学习模型主要通过模型在测试集上的运行效果来判断模型好坏,测试集相当于是&quo ...

  4. linux块设备驱动(一)——块设备概念介绍

    linux块设备驱动(一)--块设备概念介绍 本文来源于: 1. http://blog.csdn.net/jianchi88/article/details/7212370 2. http://bl ...

  5. c语言 activemq,activemq概念介绍

    ActiveMQ概念介绍 是Apache下的开源项目,完全支持JMS1.1和J2EE1.4规范的JMS Provider实现,消息中间件. 消息中间件: A传递消息到B(功能或者系统),有比较强的耦合 ...

  6. HTML/CSS学习笔记01【概念介绍、基本标签】

    w3cschool菜鸟教程.CHM(腾讯微云):https://share.weiyun.com/c1FaX6ZD HTML/CSS学习笔记01[概念介绍.基本标签.表单标签][day01] HTML ...

  7. 《统计自然语言处理》读书笔记 一.基础知识及概念介绍

    最近准备学习自然语言处理相关的知识,主要参考<统计自然语言处理·宗成庆>和<Natural Language Processing with Python>,推荐大家阅读.第一 ...

  8. DNS术语,组件和概念介绍

    DNS术语,组件和概念介绍 2014年2月18日发布 255.4k个意见 DNS 概念LINUX基础常见问题 介绍 DNS或域名系统往往是学习如何配置网站和服务器的一个非常困难的部分.了解DNS如何工 ...

  9. SQL语言基础:数据库语言概念介绍

    1.概念介绍 SQL(Structured Query Lanauage)结构化查询语言是关系数据库中最普遍使用的语言.主要包括查询.数据操纵.数据定义.数据控制功能,是一种通用的.功能强大的关系数据 ...

最新文章

  1. ISA2006标准版,本地主机不能上网问题的解决一例
  2. [译] 什么是 JavaScript 生成器?如何使用生成器?
  3. 10 python中的常量
  4. CodeForces - 1267K Key Storage(组合数学)
  5. 2017第四季度移动行业数据报告
  6. IBM挺进云计算 自家内采用私有云模式
  7. python enumerate用法总结_python enumerate用法总结
  8. C语言模拟实现标准库函数之strchr()
  9. Vue-watch选项
  10. python安装os模块_centeros安装python3过程
  11. libtoolize: error: Please install GNU M4, or 'export M4=/path/to/gnu/m4'
  12. RDP报表设置Tomcat服务自动启动详细教程
  13. 时间管理——番茄工作法
  14. 阿里云E-HPC+i4p大内存实例,加速寻因生物单细胞数据分析效率
  15. 如何利用任意波形发生器创建你想要的波形并输出
  16. Linux常用环境软件安装(提供对应安装包)
  17. json--json2bean
  18. cocos2d-x3.2与服务端框架Firefly的网络编程(初级网络通讯)
  19. wish平台入驻条件
  20. 关于CSAPP的学习:如何与如同机翻的文字搏斗及如何快速理解冗长的说明

热门文章

  1. Mysql之innodb
  2. 基于自动分段最小二乘法对股票的多项式曲线拟合
  3. 关于home 的英语
  4. python中int input_两分钟了解python中的input函数
  5. 一文读懂FTP的主动模式和被动模式
  6. C语言简单的单步调试
  7. SpringCloud学习笔记 - 消息驱动 - Spring Cloud Stream
  8. flex 在线制作相册
  9. [幻灯片]04-系统用例图和用例规约-软件需求设计方法学全程实例剖析
  10. python中析构函数的作用,Python-析构函数