次の簡単なデリゲートの例を機能させようとしています。本によると、私はそれを取り出しても大丈夫なはずですが、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());
}
}
}
何か助けはありますか?
()を削除します。
D code = new D(x.ToString);
実行ではなく、指定メソッドにします。
私はあなたが意味すると思います:
_D code = new D(x.ToString);
_
角かっこがないことに注意してください。角かっこをオンにすると、それはメソッドinvocation-でした。つまり、そのコード行でx.ToString()
を実行しようとしていました。角かっこがない場合、それはメソッドグループ-正確にデリゲートを作成する目的で、その名前で(そのコンテキストで)使用可能なメソッドを調べるようにコンパイラーに指示する式です。
どの本を使っていますか?示されている例に実際に角かっこが含まれている場合は、作成者に電子メールを送信することをお勧めします(または、少なくとも本の正誤表のページを確認してください)。 DepthのC#の場合は、隅に行って泣きます...
メソッドをデリゲートコンストラクターにフィードする必要があります。
x.ToString()
メソッドではなく、文字列です。使用する
D code = new D(x.ToString);
メソッドの最後から角かっこを外してみてください。メソッドを渡しているので、角かっこを使用する必要はありません。
D code = new D(x.ToString); // Note the: ()
デリゲートで実行するメソッドをパスする必要があります。あなたがしていることは、関数のシグネチャの代わりに値を渡すことです。
する必要があります:
D code = new D(x.ToString);