ERLEDIGT
JA
JA
ANTWORTEN
2
2
ZUGRIFFE
999
999
EMPFEHLEN
-
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
Code :1 2
public delegate void Foo(); public X (Foo)
in einer anderen Klasse Y sind Methoden implementiert, die dieser foo() - Signatur genügen:
Code :1 2 3
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 :1
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 :1
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!
-
04.06.09 15:09 #2
- Registriert seit
- Aug 2001
- Ort
- Österreich, Stmk, Graz
- Beiträge
- 2.783
Hi.
Delegate.CreateDelegate ist dein Freund.
Beispiel:
Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
class TestProgram { public delegate void Foo(); public void Bar() { Console.WriteLine("Baaaar"); } public void Call(Foo f) { f(); } public void Do() { MethodInfo mi = GetType().GetMethod("Bar"); Foo f = Delegate.CreateDelegate(typeof(Foo), this, mi) as Foo; Call(f); } }
lg,..With the first link the chain is forged. The first speech censored, the first thought forbidden, the first freedom denied, chains us all irrevocably.
Aaron Satie
Legends... are the spice of the universe, Mr. Data, because they have a way of sometimes coming true.
Captain Jean-Luc Picard, Stardate ~41294.5
Tutorials.de chattet. Hier gibts auch .net Support ^^
Klickt auf chattet und nutzt den Webchat, oder verbindet euch zu irc.tutorials.de - Channel #Tutorials.de
(moo)blog furred.net // SiteInfo für WP7 // Pastebin für WP7 // BlogEngine.net Extensions
-
Genau das war es! Danke. Das habe ich zwar auch schonmal versucht aber ich habe nicht dahinter "as Foo" geschrieben, sondern wollte es wie ein Cast mit Klammern nutzen: "Foo f =(Foo) Delegate.CreateDelegate...."
Danke nochmal!
Ähnliche Themen
-
Methode als Parameter einer Methode übergeben?
Von flashray im Forum JavaAntworten: 5Letzter Beitrag: 21.07.08, 18:35 -
Reflection - wie kann ich eine Methode benutzen
Von y0dA im Forum JavaAntworten: 3Letzter Beitrag: 21.01.08, 10:26 -
Methode an ein Form übergeben
Von flambert im Forum .NET Application und Service DesignAntworten: 3Letzter Beitrag: 04.11.07, 14:22 -
C++ methode als argument übergeben
Von langsamversteher im Forum C/C++Antworten: 1Letzter Beitrag: 17.10.07, 15:24 -
Reflection: Methode ohne Parameter (getter)
Von Vatar im Forum JavaAntworten: 5Letzter Beitrag: 10.04.07, 21:40





Zitieren

Login





