web-dev-qa-db-ja.com

デリゲート:メソッド名の予期されるエラー

次の簡単なデリゲートの例を機能させようとしています。本によると、私はそれを取り出しても大丈夫なはずですが、Method name expectedエラーが発生します。

namespace TestConsoleApp
{
    class Program
    {
        private delegate string D();

        static void Main(string[] args)
        {
            int x = 1;

            D code = new D(x.ToString());

        }
    }
}

何か助けはありますか?

14
pistacchio

()を削除します。

D code = new D(x.ToString);

実行ではなく、指定メソッドにします。

33
Hans Kesting

私はあなたが意味すると思います:

_D code = new D(x.ToString);
_

角かっこがないことに注意してください。角かっこをオンにすると、それはメソッドinvocation-でした。つまり、そのコード行でx.ToString()を実行しようとしていました。角かっこがない場合、それはメソッドグループ-正確にデリゲートを作成する目的で、その名前で(そのコンテキストで)使用可能なメソッドを調べるようにコンパイラーに指示する式です。

どの本を使っていますか?示されている例に実際に角かっこが含まれている場合は、作成者に電子メールを送信することをお勧めします(または、少なくとも本の正誤表のページを確認してください)。 DepthのC#の場合は、隅に行って泣きます...

6
Jon Skeet

メソッドをデリゲートコンストラクターにフィードする必要があります。

x.ToString()

メソッドではなく、文字列です。使用する

D code = new D(x.ToString); 
3
Jens

メソッドの最後から角かっこを外してみてください。メソッドを渡しているので、角かっこを使用する必要はありません。

0
cjk
D code = new D(x.ToString);   // Note the: ()

デリゲートで実行するメソッドをパスする必要があります。あなたがしていることは、関数のシグネチャの代わりに値を渡すことです。

0

する必要があります:

D code = new D(x.ToString);
0
Darin Dimitrov