随笔分类 -  Emit

Emit学习-实战篇-实现一个简单的AOP框架(三)
摘要:今天来介绍配置文件的定义和加载,先给出配置文件的内容,然后在详细介绍里面各节的含义,以及如何用程序加载配置文件,内容如下:[代码]配置文件中包含两个部分分别是Regeisty节和Application节,Regeisty节包含了所有切面的实现类的定义,包含id,value和isDefault三个属性:id表示这个实现的代号,在Application节可以通过这个代号来引用某个实现类,作为主键标识,... 阅读全文

posted @ 2009-04-01 21:45 yingql 阅读(3641) 评论(5) 推荐(0)

Emit学习-实战篇-实现一个简单的AOP框架(二)
摘要:已经9点了,就不废话了,直接开讲,今天就简单的介绍下框架中用到的一些接口和属性。昨天把我们关注的切面分成了三类,现在给出这3个接口的定义:[代码]l 继承IPreProcess接口可以实现对方法执行前的处理,该方法传入一个MethodContext对象,里面包含了方法执行时的一些上下文信息,然后返回一个bool值,指示是否继续执行下面的方法;l 继承IPostProcess接口... 阅读全文

posted @ 2009-03-31 21:42 yingql 阅读(3403) 评论(5) 推荐(0)

Emit学习-实战篇-实现一个简单的AOP框架(一)
摘要:周末两天窝在家里,使用Emit做了一个非常简单的AOP框架,当做是这几周学习Emit后的一个实践。东西出来了,自然要和大家分享一下,虽然框架做的比较粗糙、简单,但是也已经能够看到一点AOP的雏形了,用来自己无聊玩玩还是可以的,当然要用到产品中去肯定还需要长期的完善啦。说起AOP相信园子里很多高手都研究过,园子里好像也有自己的开源AOP项目,不过我时间有限没有细找,同时也发现园子研究AOP理论方面的... 阅读全文

posted @ 2009-03-30 21:32 yingql 阅读(5395) 评论(27) 推荐(2)

Emit学习系列文章导航
摘要:这两个星期来一直在学习Emit方面的相关内容,基础的理论已经基本学习完毕,剩下的就要靠实践的积累了,在学习的过程中,也把自己的心得、体会、碰到的问题都记录了下来,形成了一个Emit学习的系列文章,现在这个系列暂时告一段落,等到有了一定的实践积累,或者在实践中发现了什么新的问题,我会继续更新这一系列的文章,尤其是最后实践篇中的内容。现在将这些内容整理了一下,发到首页,希望能够对那些对Emit和IL有兴趣的人提供那么一点帮助,大家如果有什么问题可以在文后留言回复,我会尽力解答。这里留下我的联系方式:MSN:yinqql.cn@163.com QQ:413183023 ,由于工作原因只能在晚上上网,请大家谅解,最后附上这一系列文章的导航: 1. 前言 2. 基础篇  HelloWorld  基本概念介绍  OpCodes说明  为动态类添加属性、构造函数、方法  使用循环 3. 进阶篇  异常处理  定义事件 4. 答疑篇  Call和Callvirt的区别  值类型和引用类型的区别 5. 实践篇 阅读全文

posted @ 2009-03-28 16:23 yingql 阅读(12180) 评论(15) 推荐(9)

Emit学习-进阶篇-异常处理
摘要:异常的处理也是程序中比较重要的一个部分,今天我们就针对用IL书写异常处理代码进行讲解,首先照例给出要实现的类的C#代码,如下:[代码]代码比较简单,主要就是阐述如何在IL代码中加入try、catch块。这里面会用到ILGenerator类中的几个新方法,介绍如下:l BeginExceptionBlock:用来表示需要异常处理的代码的开始,相当于C#代码中的try关键字;l E... 阅读全文

posted @ 2009-03-27 09:22 yingql 阅读(1594) 评论(6) 推荐(0)

Emit学习-进阶篇-定义事件
摘要:之前在研究如何用Emit为动态类添加事件,本来以为会非常简单,但是却碰到了许多的问题,有些问题在之前的答疑篇中已经提到了,并予以了解决,虽然有些地方自己也不是很明白,但毕竟还是解决了,最后比较我写的IL代码,和系统自动生成的,总有一些地方无法做到一致。特别是在为事件添加add和remove方法时,碰到了许多问题,下面我将针对这些问题进行讲解。按照惯例,先给出要实现的类的C#代码,方便反编译后对照着... 阅读全文

posted @ 2009-03-27 09:22 yingql 阅读(1472) 评论(1) 推荐(0)

Emit学习-基础篇-使用循环
摘要:今天我们来研究下用IL书写For循环和Foreach循环,在书中一直看到说使用Foreach循环比普通的For循环来的好,这次正好趁机来看看他们的IL代码有何不同.按照惯例,我们先给出要实现的类的C#代码,如下:[代码]然后,我们先来实现其中的ForMethod,相信大家已经等不及了,那么我先给出实现的IL代码,然后针对其中的关键部分进行讲解,代码如下:[代码]为了在测试时方便点,这里我为方法加上... 阅读全文

posted @ 2009-03-24 22:19 yingql 阅读(2373) 评论(4) 推荐(0)

Emit学习-答疑篇-值类型和引用类型在使用时的区别
摘要:今天下午兴冲冲的写完一段IL代码,用Reflector转成C#代码看了下,没有问题,于是引用持久化到硬盘上的动态程序集,想要试一下其中的方法,但是运行后却出现了System.AccessViolationException,提示信息为:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”。看着错误提示一阵头大,新配的电脑内存损坏是不太可能了,只好从自己的程序中找原因。... 阅读全文

posted @ 2009-03-23 21:42 yingql 阅读(1797) 评论(5) 推荐(2)

Emit学习-答疑篇-Call和Callvirt的区别
摘要:之前在Emit的学习过程中,多次碰到了方法的调用,发现有时候是使用Call而有时候是使用Callvirt,一直对这两者的区别不甚了解。然后就查阅了MSDN,MSDN中对这两者的解释为:l Call:调用由传递的方法说明符指示的方法;l Callvirt:对对象调用后期绑定方法,并且将返回值推送到计算堆栈上。但是看了之后还是很不明白,我想可能是因为中文版的缘故吧。今天下午再次看到... 阅读全文

posted @ 2009-03-23 20:45 yingql 阅读(3004) 评论(1) 推荐(1)

Emit学习-基础篇-为动态类添加属性、构造函数、方法
摘要:我们通过一个计算A+B的动态类来演示如何为一个动态类添加属性、构造函数、方法,以及在方法中使用类中定义的属性,按照惯例,我们先给出要实现的动态类的C#代码,然后再针对C#代码给出相应的实现,代码如下:[代码]前面的步骤和之前的斐波那契实现相同,这里我们直接从属性的定义开始。首先,我们通过TypeBuilder对象的DefineField方法来定义私有字段_a和_b,并为它们设置默认值0,代码如下:... 阅读全文

posted @ 2009-03-22 20:07 yingql 阅读(4209) 评论(6) 推荐(4)

Emit学习-基础篇-基本概念介绍
摘要:之前的Hello World例子应该已经让我们对Emit有了一个模糊的了解,那么Emit到底是什么样一个东西,他又能实现些什么功能呢?昨天查了点资料,大致总结了下,由于才开始学习肯定有不完善的地方,希望大家能够批评指正。1.       什么是反射发出(Reflection Emit)Emit应该是属于反射中的一个比较高级的功能,说到反射大家应该都... 阅读全文

posted @ 2009-03-22 13:58 yingql 阅读(5096) 评论(9) 推荐(7)

Emit学习-目录
摘要:1.  前言2.   基础篇l HelloWorldl 基本概念介绍l OpCodes说明l 为动态类添加属性、构造函数、方法l 使用循环3.  进阶篇l 异常处理l 定义事件4.  答疑篇l  Call和Callvirt的区别l ... 阅读全文

posted @ 2009-03-20 21:46 yingql 阅读(1940) 评论(2) 推荐(1)

Emit学习-基础篇-HelloWorld
摘要:按照业界的惯例,我们用一个最简单的例子——“Hello World”,来开始我们的Emit之旅。例子的相关代码及注释如下:[代码]HelloWorld这里我们只是用这个例子让大家对Emit以及IL有个直观的了解,其中用到的方法将在以后的章节中具体讲解,这里附带该程序的源码下载 HelloWorld。 阅读全文

posted @ 2009-03-20 21:40 yingql 阅读(5880) 评论(10) 推荐(12)

Emit学习-前言
摘要:最近一直外派在农行做项目,不能上网,非常无聊,前天下午又领了新电脑,连USB都禁了,不能带自己的电脑,又没法带电子书看。昨天上班后就在那里翻MSDN,无意中发现了里面有介绍到Emit(反射发出)的东西,而自己之前正好很想看一下这方面的东西,丰富一下自己的知识储备,所以就翻看起来。随后又花了一个下午的时间,用IL写了一个求斐波那契数列的动态方法。今天一早在车上,突然想到将每天看的东西都记录下来(因为... 阅读全文

posted @ 2009-03-20 21:13 yingql 阅读(2984) 评论(2) 推荐(1)

导航