In meiner Klasse 'myClass' verwende ich Reflection.Emit, um einen Ereignishandler für einen Member der myClass-Klasse dynamisch zu schreiben.Referenz 'this' im dynamischen Ereignishandler
Ich habe das erfolgreich gemacht.
Jetzt möchte ich den Event-Handler ändern, um eine der Instanzmethoden in der myClass-Klasse aufzurufen.
Allerdings kann ich nicht herausfinden, wie man eine Referenz auf 'this' mit Reflection.Emit auf den MSIL-Stack verschiebt. Ldarg_0 ist im Event-Handler kein Verweis auf 'this', sondern der erste Parameter des Event-Handlers.
Kann jemand einen Verweis auf "dieses" auf dem Stapel schieben, damit ich eine Instanzmethode aufrufen kann. Zum Beispiel möchte ich, dass der C# -Code wie folgt aussieht:
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
}
}
Vielen Dank!
Wenn Sie "Main" sagen, beziehen Sie sich auf eine tatsächliche Klasse oder die 'static void main' Methode, die ein Programm startet? Es sieht so aus, als gäbe es einige Verwirrung aufgrund der Antwort von Jakers. – jasonh
Sorry, schlechte Wahl. Ich überarbeiten – emrosenf
Sie können eine Instanzmethode nicht von einer statischen Methode aufrufen, da es keine Instanz gibt, auf die sie aufgerufen werden kann. –