2017-02-14 3 views
-2

In einer Konsole app, ich habe folgendes:Warum funktioniert dieser Delegat nicht?

static void Main(string[] args) 
{ 
    var t = New Test(); 
    var newString = t.TestDelegate(tester("just testing")); 

    public static string tester(string s) { 
    return s; 
    } 
} 

public delegate string MyDelegate(string s); 

public class Test 
{ 
    public string TestDelegate(MyDelegate m) 
    { 
    return "success!"; 
    } 
} 

Dies funktioniert nicht. Auf der var newString Linie, erhalte ich folgende Fehlermeldung:

cannot convert from 'string' to 'MyDelegate'

tester hat die gleiche Signatur wie MyDelegate. Was mache ich falsch?

+0

Die 'TestDelegate()' Methode benötigt eine Instanz von 'MyDelegate'. Sie übergeben es eine 'Zeichenfolge'. Wenn Sie eine Delegat-Instanz übergeben möchten, die auf "tester" verweist, übergeben Sie einfach "tester", d. H. "Var newString = t.TestDelegate (tester);'. Wenn das nicht das ist, was du willst, dann habe ich keine Ahnung, was du willst. Bitte stellen Sie Ihre Frage so, dass es Sinn macht. –

+2

Wie viele Buchstaben befinden sich in einem gewöhnlichen Umschlag? Ein. Wie viele Buchstaben befinden sich in einem "normalen Umschlag"? Achtzehn. Eine Funktion, die eine Zeichenkette erzeugt, und die Zeichenkette, die sie erzeugt, sind zwei sehr unterschiedliche Dinge. –

Antwort

4

Sie nicht delegieren vorbei sind - Sie sind vorbei Ergebnis tester("just testing") Methodenausführung (die Zeichenkette):

t.TestDelegate(tester("just testing")) 

Wenn Sie Delegaten übergeben möchten:

t.TestDelegate(tester); 

auch nicht wahr Verwenden Sie Delegierten m in Ihrer TestDelegate Methode übergeben. Sie können, wie etwas tun:

public string TestDelegate(MyDelegate m) 
{ 
    return m("success!"); // m will be your tester method and you call it with success param 
} 

Und Sie statische Methode in anderer Methode deklarieren (aber ich glaube, es ist nur copy-paste Tippfehler).

Verwandte Themen