文章分类 -  Emit

摘要:原文地址作者:Mike Snell,Lars Powers翻译:today在我们之前的文章,反射的第一部分:发现和执行里,我们已经介绍了System.Reflection命名空间及其包含的类,开发人员使用这些类可以查看程序集的元数据,并且可以在运行时查找和发现类型,甚至可以调用发现的代码。在这篇文章中,我们将探讨反射的高级功能:Emit,它具有在运行时动态的产生代码的功效。回顾反射首先,让我们快速... 阅读全文
posted @ 2009-08-03 15:41 JoeWang 阅读(151) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/yingql/archive/2009/03/28/1423999.html 今天来介绍配置文件的定义和加载,先给出配置文件的内容,然后在详细介绍里面各节的含义,以及如何用程序加载配置文件,内容如下:[代码]配置文件中包含两个部分分别是Regeisty节和Application节,Regeisty节包含了所有切面的实现类的定义,包含id,valu... 阅读全文
posted @ 2009-08-03 15:34 JoeWang 阅读(147) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/yingql/archive/2009/03/28/1423999.html已经9点了,就不废话了,直接开讲,今天就简单的介绍下框架中用到的一些接口和属性。昨天把我们关注的切面分成了三类,现在给出这3个接口的定义:[代码]l 继承IPreProcess接口可以实现对方法执行前的处理,该方法传入一个MethodContext对象,里面包含了方法执行... 阅读全文
posted @ 2009-08-03 15:32 JoeWang 阅读(153) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/yingql/archive/2009/03/30/1425500.html 周末两天窝在家里,使用Emit做了一个非常简单的AOP框架,当做是这几周学习Emit后的一个实践。东西出来了,自然要和大家分享一下,虽然框架做的比较粗糙、简单,但是也已经能够看到一点AOP的雏形了,用来自己无聊玩玩还是可以的,当然要用到产品中去肯定还需要长期的完善啦。说... 阅读全文
posted @ 2009-08-03 15:30 JoeWang 阅读(268) 评论(0) 推荐(0)
摘要:转自http://www.cnblogs.com/yingql/archive/2009/03/28/1423999.html 今天下午兴冲冲的写完一段IL代码,用Reflector转成C#代码看了下,没有问题,于是引用持久化到硬盘上的动态程序集,想要试一下其中的方法,但是运行后却出现了System.AccessViolationException,提示信息为:“尝试读取或写入受保护的... 阅读全文
posted @ 2009-08-03 15:28 JoeWang 阅读(120) 评论(0) 推荐(0)
摘要:转自:http://www.cnblogs.com/yingql/archive/2009/03/28/1423999.html 之前在Emit的学习过程中,多次碰到了方法的调用,发现有时候是使用Call而有时候是使用Callvirt,一直对这两者的区别不甚了解。然后就查阅了MSDN,MSDN中对这两者的解释为:l Call:调用由传递的方法说明符指示的方法;l Callvirt:对对象调用后期绑... 阅读全文
posted @ 2009-08-03 15:23 JoeWang 阅读(643) 评论(1) 推荐(0)
摘要:转自http://www.cnblogs.com/yingql/archive/2009/03/28/1423999.html 之前在研究如何用Emit为动态类添加事件,本来以为会非常简单,但是却碰到了许多的问题,有些问题在之前的答疑篇中已经提到了,并予以了解决,虽然有些地方自己也不是很明白,但毕竟还是解决了,最后比较我写的IL代码,和系统自动生成的,总有一些地方无法做到一致。特别是在为事件添加a... 阅读全文
posted @ 2009-08-03 15:19 JoeWang 阅读(121) 评论(0) 推荐(0)
摘要:转自http://www.cnblogs.com/yingql/archive/2009/03/28/1423999.html异常的处理也是程序中比较重要的一个部分,今天我们就针对用IL书写异常处理代码进行讲解,首先照例给出要实现的类的C#代码,如下:[代码]代码比较简单,主要就是阐述如何在IL代码中加入try、catch块。这里面会用到ILGenerator类中的几个新方法,介绍如下:l Beg... 阅读全文
posted @ 2009-08-03 15:11 JoeWang 阅读(185) 评论(0) 推荐(0)
摘要:转自http://www.cnblogs.com/yingql/archive/2009/03/28/1423999.html 今天我们来研究下用IL书写For循环和Foreach循环,在书中一直看到说使用Foreach循环比普通的For循环来的好,这次正好趁机来看看他们的IL代码有何不同.按照惯例,我们先给出要实现的类的C#代码,如下:[代码]然后,我们先来实现其中的ForMethod,相信大家... 阅读全文
posted @ 2009-08-03 15:02 JoeWang 阅读(172) 评论(0) 推荐(0)
摘要:我们通过一个计算A+B的动态类来演示如何为一个动态类添加属性、构造函数、方法,以及在方法中使用类中定义的属性,按照惯例,我们先给出要实现的动态类的C#代码,然后再针对C#代码给出相应的实现,代码如下:[代码]前面的步骤和之前的斐波那契实现相同,这里我们直接从属性的定义开始。首先,我们通过TypeBuilder对象的DefineField方法来定义私有字段_a和_b,并为它们设置默认值0,代码如下:... 阅读全文
posted @ 2009-08-03 14:54 JoeWang 阅读(386) 评论(0) 推荐(0)
摘要:之前的Hello World例子应该已经让我们对Emit有了一个模糊的了解,那么Emit到底是什么样一个东西,他又能实现些什么功能呢?昨天查了点资料,大致总结了下,由于才开始学习肯定有不完善的地方,希望大家能够批评指正。 1. 什么是反射发出(Reflection Emit)Emit应该是属于反射中的一个比较高级的功能,说到反射大家应该都不陌生,反射是在运行时发现对象的相关信息,并且执行这些对象... 阅读全文
posted @ 2009-08-03 14:42 JoeWang 阅读(272) 评论(1) 推荐(0)
摘要:名称说明Add将两个值相加并将结果推送到计算堆栈上。Add_Ovf将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上。Add_Ovf_Un将两个无符号整数值相加,执行溢出检查,并且将结果推送到计算堆栈上。And计算两个值的按位“与”并将结果推送到计算堆栈上。Arglist返回指向当前方法的参数列表的非托管指针。Beq如果两个值相等,则将控制转移到目标指令。Beq_S如... 阅读全文
posted @ 2009-08-03 14:40 JoeWang 阅读(358) 评论(0) 推荐(0)
摘要:按照业界的惯例,我们用一个最简单的例子——“Hello World”,来开始我们的Emit之旅。例子的相关代码及注释如下:[代码]HelloWorld这里我们只是用这个例子让大家对Emit以及IL有个直观的了解,其中用到的方法将在以后的章节中具体讲解,这里附带该程序的源码下载 HelloWorld。 阅读全文
posted @ 2009-08-03 14:34 JoeWang 阅读(178) 评论(0) 推荐(0)