2017-02-14 219 views
-2

在一個控制檯應用程序,我有以下幾點:這個代表爲什麼不工作?

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!"; 
    } 
} 

這是行不通的。在var newString行,我得到以下錯誤:

cannot convert from 'string' to 'MyDelegate'

tester具有相同的簽名MyDelegate。我究竟做錯了什麼?

+0

'TestDelegate()'方法需要一個MyDelegate實例。你傳遞給它一個'string'。如果你想傳遞一個指向'tester'的委託實例,那麼只需通過'tester',即'var newString = t.TestDelegate(tester);'。如果這不是你想要的,那麼我不知道你想要什麼。請修正你的問題,這是有道理的。 –

+2

普通信封裏有多少封信?一。 「普通信封」裏有多少封信?十八。一個產生一個字符串的函數和它產生的字符串是兩個完全不同的東西。 –

回答

4

你是不是通過委託 - 你逝去的tester("just testing")方法執行的結果(這是字符串):

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

如果你想通過委託:

t.TestDelegate(tester); 

你也不要在您的TestDelegate方法中使用通過的代理m。你可以這樣做:

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

而你聲明內的其他方法,靜態方法(但我相信這只是複製粘貼錯誤)。