随笔分类 -  09.Emit动态编程

生成动态程序集
摘要:对于集合的遍历,使用foreach是非常方便的,但是Emit动态生成foreach的代码就要复杂很多。它涉及到以下几个方面:(1)IEnumerable<> 是所有可枚举类型的基础接口。(2)IEnumerator<>,通过IEnumerable<> 接口的GetEnumerator方法可以获取枚举器IEnumerator<>,而对集合元素的遍历正是... 阅读全文
posted @ 2010-04-02 11:42 zhuweisky 阅读(2113) 评论(2) 推荐(0) 编辑
摘要:在大型系统中,我们经常需要监视我们系统执行的性能状况,当出现性能问题时,我们要能够迅速地找到瓶颈在什么地方。在程序的层面上来说,就是看哪个方法执行所消耗的时间很长。 阅读全文
posted @ 2009-04-22 11:16 zhuweisky 阅读(4279) 评论(9) 推荐(0) 编辑
摘要:在下面的例子中,我定义了一个事件发布类Computer,事件订阅者ComputerManager。Computer发布了一个OnAction事件,并且该事件在Increase方法被调用时触发。ComputerManager接收到事件通知时,会将成员字段handleCount增加1. 先看Computer的定义: Code highlighting produced by Act... 阅读全文
posted @ 2008-09-23 16:47 zhuweisky 阅读(1161) 评论(1) 推荐(0) 编辑
摘要:在IL中,方法的定义语法: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->.method () { } 一.Flags部分可设置 1.可访问性 privatescope: 该方法不能被引用。 priv... 阅读全文
posted @ 2008-09-23 14:30 zhuweisky 阅读(2578) 评论(0) 推荐(0) 编辑
摘要:本文通过一个简单的示例来说明在IL中进行异常处理时要注意的关键点。 我们来看一个包含try...catch...finally的示例: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> public void Test... 阅读全文
posted @ 2008-09-22 15:36 zhuweisky 阅读(2337) 评论(2) 推荐(0) 编辑
摘要:以ToString()方法为例,深入的剖析了使用Emit发射方法调用要注意的关键点。 阅读全文
posted @ 2008-09-20 11:10 zhuweisky 阅读(2354) 评论(2) 推荐(0) 编辑
摘要:本文介绍了Emit中OpCodes.Ldind_Ref 和 OpCodes.Ldind_I* 的作用区别。 阅读全文
posted @ 2008-09-19 16:46 zhuweisky 阅读(1828) 评论(0) 推荐(1) 编辑
摘要:当我将基于DataRabbit的应用程序放到windows server 2008 SP1上运行时,抛出了System.AccessViolationException,提示信息为:“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”。而这个应用程序在windows server 2003上一直是非常正常的。根据异常的堆栈信息,可以知道是IORMapping.GetEntityFr... 阅读全文
posted @ 2008-09-13 12:22 zhuweisky 阅读(10261) 评论(4) 推荐(1) 编辑
摘要:动态代理的一个最主要的应用场合就是实现AOP - 截获方法调用,加入自己的预处理、后处理或Around处理。 我在ESBasic.Emit中实现了对这些截获的支持。 首先,介绍两个截获者: /// /// IMethodInterceptor 对方法进行截获并加入预处理和后处理。 /// public interface IMethod... 阅读全文
posted @ 2008-05-21 17:42 zhuweisky 阅读(5674) 评论(13) 推荐(0) 编辑
摘要:我们假设静态类DataHelper类有一个静态方法: public static object GetSafeDbValue(object val) { if (val != null) { return val; } retur... 阅读全文
posted @ 2008-05-05 15:23 zhuweisky 阅读(2471) 评论(5) 推荐(0) 编辑
摘要:动态代理拥有这样的能力--使得某个类型A在运行的时候能转化为一个指定的接口I,即使这个类型A在定义的时候并没有从这个指定的接口I继承。 阅读全文
posted @ 2007-04-27 10:48 zhuweisky 阅读(6409) 评论(5) 推荐(2) 编辑
摘要:在使用泛型技术时,我们经常使用静态泛型参数,即泛型的参数类型在编译时就已经确定,比如: IList list = new List(); 集合IList的泛型参数是int类型,这在编译期就可以知道,于是,我们可以这样调用IList的Add方法: list.Add(6) ; 如果泛型的参数类型是动态的了,也就是说,只有当程序运行起来后,才知道泛型参数的具体类型,其可能是... 阅读全文
posted @ 2007-04-26 17:58 zhuweisky 阅读(11338) 评论(18) 推荐(0) 编辑