2009-03-13 7 views
1

Ich versuche, den Namen einer Methode von einer Klasse zu einer anderen Klasse zu übergeben, damit die andere Klasse sie zu einem Ereignis "abonnieren" kann, das der ersten Klasse nicht bekannt ist. Sagen wir, ich habe diese Klassen bekam:Wie konvertiert man einen String in eine «Funktionssignatur», um einen Delegaten zu erstellen?

class1 
{ 
    public void method1(string msg) 
    { 
    //does something with msg 
    } 

    public void i_make_a_class2() 
    { 
    class2 bob = new class2(method1); 
    } 
} 

class2 
{ 
    delegate void deleg(string msg); 
    deleg deleg1; 

    public class2(string fct) 
    { 
    // What I'm trying to do would go there with "fct" converted to function signature 
    deleg1 = new deleg(fct); 
    // Rest of the class constructor... 
    } 
    private void method2() 
    { 
    deleg1(im_a_String); 
    } 
} 

Antwort

3

Sie wollen nicht wirklich den Namen der Funktion zu übergeben - Sie die Delegatfunktion selbst übergeben wollen - das ist der Schlüssel für die Delegierten. Gib mir eine Minute und ich schreibe den Code so, wie du es willst.

Hier gehen Sie:

public delegate void deleg(string msg); 

public class class1 
{ 
    public void method1(string msg) 
    { 
    //does something with msg 
    } 

    public void i_make_a_class2() 
    { 
    class2 bob = new class2(method1); 
    } 
} 

public class class2 
{ 
    deleg deleg1; 
    string im_a_String = "Test"; 

    public class2(deleg fct) 
    { 
    deleg1 = fct; 
    // Rest of the class constructor... 
    } 
    private void method2() 
    { 
    deleg1(im_a_String); 
    } 
} 
+0

Dank! Mit Johannes 'Antwort habe ich so etwas gemacht, aber nicht so einfach! Ich habe jetzt das Gefühl, dass ich kaum die Oberfläche von C# kratzen kann! Das ist ein großes Plus! ;-) – Tipx

+0

Delegierte sind mehr als nur an der Oberfläche von C# zu kratzen, du solltest dich selbst gratulieren, wenn du verstehst, wie es funktioniert wie oben. – Chris

Verwandte Themen