tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
999
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    progo progo ist offline Grünschnabel
    Registriert seit
    Jun 2009
    Beiträge
    3
    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!
     

  2. #2
    Avatar von Alexander Schuc
    Alexander Schuc Alexander Schuc ist offline admin | crazy-weasel
    tutorials.de Administrator
    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

  3. #3
    progo progo ist offline Grünschnabel
    Registriert seit
    Jun 2009
    Beiträge
    3
    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

  1. Antworten: 5
    Letzter Beitrag: 21.07.08, 18:35
  2. Antworten: 3
    Letzter Beitrag: 21.01.08, 10:26
  3. Methode an ein Form übergeben
    Von flambert im Forum .NET Application und Service Design
    Antworten: 3
    Letzter Beitrag: 04.11.07, 14:22
  4. C++ methode als argument übergeben
    Von langsamversteher im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 17.10.07, 15:24
  5. Antworten: 5
    Letzter Beitrag: 10.04.07, 21:40

Stichworte