【发布时间】:2011-02-17 04:46:35
【问题描述】:
通常,当我想在另一个正在编写相同类型的方法的 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 的引用)。此方法在当前动态类型的基类中被定义为受保护的虚拟(并且在我无法获得引用的方法构建器上被覆盖),我可以通过这样做来获得对它的引用:
generator.Emit(OpCodes.Ldarg_0); // reference to the current object
generator.Emit(OpCodes.Ldstr, "someArgument");
generator.Emit(OpCodes.Call, baseType.GetMethod("SomeMethodDefinedInBaseClassThatWasOverridenInThisDynamicType"));
问题在于 this 调用的是基类型上的方法,而不是被覆盖的方法。
有什么方法可以让我获得对只有引用定义它的类型构建器的方法构建器的引用?或者有没有办法使用 ILGenerator 调用方法而无需将 'MethodInfo' 对象传递给它?
【问题讨论】:
标签: c# .net cil reflection.emit opcodes