【发布时间】:2009-07-13 17:57:57
【问题描述】:
在我的“myClass”类中,我使用 Reflection.Emit 为 myClass 类的成员之一动态编写事件处理程序。
我已经成功完成了。
现在,我想修改事件处理程序以调用 myClass 类中的实例方法之一。
但是,我无法弄清楚如何使用 Reflection.Emit 将对“this”的引用推送到 MSIL 堆栈。在事件处理程序中,Ldarg_0 不是对“this”的引用,而是事件处理程序的第一个参数。
有谁知道如何在堆栈上推送对“this”的引用,以便我可以调用实例方法。例如,这就是我希望 c# 代码的样子:
public class myClass
{
private myObj1 obj1;
public myClass() {
this.init();
}
private void init()
{
obj1.myEvent += new myEvent_EventHandler(theHandler);
}
private void theHandler(myObj2 obj2, myObj3 obj3)
{
// this is the part I'm having trouble with
this.myFunction(obj2);
}
private void myFunction(myObj2 obj2)
{
// irrelevant
}
}
谢谢!
【问题讨论】:
-
当您说“Main”时,您指的是实际类还是启动程序的
static void main方法?根据 Jakers 的回答,似乎有些混乱。 -
对不起,糟糕的选择。我会修改
-
您不能从静态方法调用实例方法,因为没有实例可以调用它。
-
这里没有什么是静态的,我写了一个代码示例
标签: c# reflection event-handling cil reflection.emit