在我的'myClass'类中,我使用Reflection.Emit为myClass类的成员之一动态编写事件处理程序。在动态事件处理程序中引用'this'
我已经成功完成了这项工作。
现在,我想修改事件处理函数来调用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
}
}
谢谢!
当你说“主”是你指的是一个实际的类或启动程序的`static void main`方法吗?基于Jakers的回答,看起来有些混乱。 – jasonh 2009-07-13 18:07:40
对不起,选择不好。我将修改 – emrosenf 2009-07-13 18:13:18
您不能从静态方法调用实例方法,因为没有实例可以调用它。 – 2009-07-13 18:19:26