Hallo,
Ich hoffe hier kann mir geholfen werden. Ich würde gern eine Methode, die ich per reflection "in der Hand" habe an ein delegate übergeben. Leider hat man aber nicht die Methode selbst sondern nur den Namen der Methode als String, wenn man über reflection darauf zugreift. Casten etc. hat alles nicht geholfen.
Das Problem ist das der Compiler bei der Übergabe eine Methode ohne die Klammern und keinen String mit dem Namen der Methode erwartet. Also sozusagen nur einen Funktionspointer. Die Frage ist also wie komme ich per reflection an den Pointer ran.
Beispiel zur Verdeutlichung
in der Klasse X ist ein delegate definiert und der Konstruktor bekommt als Argument eine Methode übergeben
in einer anderen Klasse Y sind Methoden implementiert, die dieser foo() - Signatur genügen:
Nun kann man ja bekanntlich diese Methode an das Delegat übergeben z.B. in dem man den Konstruktor mit der Methode aufruft:
Der Compiler erkennt, dass es sich bei Bar um ein Methode handelt und übergibt sie.
Ich habe aber nicht die Methode selbst, sondern nur den Namen der Methode per Reflection:
Alle MethodInfo - Methoden liefern nur Strings der Methodennamen aber keine "wirklichen" Pointer zur Übergabe an ein Delegat wie oben beschrieben.
Gibt es eine Möglichkeit? Ich hoffe ich konnte mein Problem verständlich erklären!
Ich hoffe hier kann mir geholfen werden. Ich würde gern eine Methode, die ich per reflection "in der Hand" habe an ein delegate übergeben. Leider hat man aber nicht die Methode selbst sondern nur den Namen der Methode als String, wenn man über reflection darauf zugreift. Casten etc. hat alles nicht geholfen.
Das Problem ist das der Compiler bei der Übergabe eine Methode ohne die Klammern und keinen String mit dem Namen der Methode erwartet. Also sozusagen nur einen Funktionspointer. Die Frage ist also wie komme ich per reflection an den Pointer ran.
Beispiel zur Verdeutlichung
in der Klasse X ist ein delegate definiert und der Konstruktor bekommt als Argument eine Methode übergeben
Code:
public delegate void Foo();
public X (Foo)
in einer anderen Klasse Y sind Methoden implementiert, die dieser foo() - Signatur genügen:
Code:
public void Bar()
{ // do somthing;
}
Nun kann man ja bekanntlich diese Methode an das Delegat übergeben z.B. in dem man den Konstruktor mit der Methode aufruft:
Code:
X XObj = new X(Bar);
Der Compiler erkennt, dass es sich bei Bar um ein Methode handelt und übergibt sie.
Ich habe aber nicht die Methode selbst, sondern nur den Namen der Methode per Reflection:
Code:
MethodInfo method = thisType.GetMethod(member.Name);
Alle MethodInfo - Methoden liefern nur Strings der Methodennamen aber keine "wirklichen" Pointer zur Übergabe an ein Delegat wie oben beschrieben.
Gibt es eine Möglichkeit? Ich hoffe ich konnte mein Problem verständlich erklären!