2017-02-14 3 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'

testerMyDelegateと同じシグネチャを持っています。私は間違って何をしていますか?

+0

'TestDelegate()'メソッドは、 'MyDelegate'のインスタンスを必要とします。あなたは 'string'を渡しています。 'tester'を参照するデリゲートインスタンスを渡したい場合、' tester'を 'var newString = t.TestDelegate(tester);'に渡してください。それがあなたが望むものでないなら、私はあなたが何を望んでいるか分からない。それが理にかなっているようにあなたの質問を修正してください。 –

+2

普通の封筒には何文字が入っていますか? 1。 「普通の封筒」には何文字が入っていますか? 18歳。文字列とそれが生成する文字列を生成する関数は、2つの非常に異なるものです。 –

答えて

4

あなたは、デリゲートを渡していません - あなたは(文字列です)tester("just testing")メソッドの実行結果渡している:あなたは、デリゲートを渡したい場合は

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

を:

t.TestDelegate(tester); 

はまた、あなたにはありませんあなたのメソッドで渡されたデリゲートmを使用してください。

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

そして、あなたは他のメソッド内の静的メソッドを宣言している(しかし、私はそれだけでコピー&ペーストをタイプミスだと信じて):あなたのような何かを行うことができます。

関連する問題