2010-05-08 91 views
0

通常一个的ILGenerator动态生成的方法,当我想打电话给在被编写方法上同类型的其他的ILGenerator对象动态方法我做了以下内容:呼吁在同类型

generator.Emit(OpCodes.Ldarg_0); // reference to the current object 
generator.Emit(OpCodes.Ldstr, "someArgument"); 
generator.Emit(OpCodes.Call, methodBuilder); //this methodbuilder is also defined on this dynamic type. 

但是,我遇到了以下问题:我无法引用要调用的方法的方法构建器,因为它是由另一个框架生成的(我只获取对当前TypeBuilder的引用)。该方法被定义为受保护的虚拟(和重写在methodbuilder我不能得到一个参考)在基类当前的动态型的,我可以通过执行此获得对它的引用:

generator.Emit(OpCodes.Ldarg_0); // reference to the current object 
generator.Emit(OpCodes.Ldstr, "someArgument"); 
generator.Emit(OpCodes.Call, baseType.GetMethod("SomeMethodDefinedInBaseClassThatWasOverridenInThisDynamicType")); 

问题这是调用基类型的方法而不是重写方法。

有没有什么办法可以得到一个方法构建器的引用,只引用定义它的类型构建器?或者有没有办法使用ILGenerator调用方法,而不必将“MethodInfo”对象传递给它?

回答

0

不知道我关注,但您需要使用Opcodes.CallVirt来调用虚拟方法。其中应该自动调用重写的方法。

+0

工作,谢谢。 – 2010-05-08 18:32:25