2017-02-14 127 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 
} 

而你声明内的其他方法,静态方法(但我相信这只是复制粘贴错误)。