
Emit学习之旅
nic7968
这个作者很懒,什么都没留下…
展开
-
Emit学习之旅(1):Emit概览
一、Emit概述 Emit,可以称为发出或者产生。在Framework中,与Emit相关的类基本都存在于System.Reflection.Emit命名空间下。可见Emit是作为反射的一个元素存在的。说道反射,大家应该都不陌生,它允许我们查看程序集的元素据,从而取得形如程序转载 2011-09-08 17:46:23 · 779 阅读 · 0 评论 -
Emit学习之旅(2):创建常见元素—基础部分
上回已经用Emit创建了一个简单的类型。下面接着说说如何为动态创建的类添加实例成员,属性,方法等。准备工作这次来创建一个Student类。首先准备好大致框架:转载 2011-09-08 17:43:40 · 497 阅读 · 0 评论 -
动态代理方式实现AOP (emit)
摘要:面向对象的思想强调"一切皆是对象",在面向对象的程序中我们使用真实概念的模型思考问题,使得整个软件系统开发可以像搭建房屋一样有条不紊。然而面向对象也并非完美无缺的,它更注重于对象层次结构方面的东西,对于如何更好的管理对象行为内部结构,还存在着些许不足。那么我们如何使这个问题转载 2011-09-09 01:50:37 · 2221 阅读 · 0 评论 -
自己动手开发编译器(十二)生成托管代码
前一阶段我们完成了编译器中的重要阶段——语义分析。现在,程序中的每一个变量和类型都有其正确的定义;每一个表达式和语句的类型都是合法的;每一处方法调用都选择了正确的方法定义。现在即将进入下一个阶段——代码生成。代码生成的最终目的,是生成能在目标机器上运行的机器码,或者可以和其他库链接在一起的可重定向对象。代码生成,和这一阶段的各个优化手段,统称为编译器的后端。目前大部分编译器,在代码生成时,都倾向于转载 2012-02-10 08:56:30 · 558 阅读 · 0 评论 -
Emit if-else,while和for
.NET(C#):分析IL中的if-else,while和for语句并用Emit实现这是一篇关于IL和反射Emit的文章(所以不喜欢IL或者Emit的就没必要往下看了),要求读者对IL和Emit工作原理较了解。所有分析IL均在Visual Studio 2010 SP1下编译生成。(其他编译器不一定100%结果一样但逻辑上肯定是等价的,希望读者学到“为什么”,而不是“是什么”)。转载 2012-02-27 01:26:37 · 941 阅读 · 0 评论 -
动态创建方法和使用msil指令动态写入方法一(了解ILGenerator)
动态创建方法和使用msil指令动态写入方法一(了解ILGenerator)之前讲过关于如何动态创建和使用程序集、类、方法、字段、属性等两篇文章,第一篇主要讲了介绍动态创建类型的一些基本知识和如何创建程序集、类等,第二篇主要介绍的是如何使用动态创建的程序集,调用动态创建类的方法等的一个完整DEMO。今天讲的其实也是关于在动态创建类型里,如何动态的创建一个较复杂的方法,当然今天这一篇主要着重以介绍转载 2012-02-28 13:34:48 · 959 阅读 · 0 评论 -
emit 指令
numberGetIL.Emit(OpCodes.Ldarg_0);//将索引为 0 的参数加载到计算堆栈上numberGetIL.Emit(OpCodes.Ldfld, fb);//用新值替换在对象引用或指针的字段中存储的值(改为弹出压入的参数,压入fb)numberGetIL.Emit(OpCodes.Ret);//从当前方法返回,并将返回值(如果存在)从调用方的计算堆栈推送到被调用方转载 2012-02-28 13:30:57 · 1074 阅读 · 0 评论 -
从IL和反射Emit更彻底地理解out参数
C#中ref和out的文章有很多,这篇文章主要从IL上分析out参数的本质。目录out = ref + ParameterAttributes.Out反射调用ref和out方法Emit构建out或ref参数返回目录out = ref + ParameterAttributes.Out看两个out和ref的方法。 st转载 2012-02-28 17:22:54 · 1504 阅读 · 0 评论 -
获取一个重载的泛型方法
今天看到hbb0b0的一个帖子:如何用反射实现如下的泛型方法调用? , 询问如何获取一个重载的泛型方法。因为Type没有提供GetGenericMethod方法,调用GetMethod可能会抛出一个AmbiguousMatchException异常或者无法获得正确的泛型方法。本文提供一种途径,通过查询Type所有的Method找到正确的方法。1 using System; 2转载 2012-02-29 01:10:51 · 531 阅读 · 0 评论