1

これらのコード行があります。

class Program
{
    public delegate void printer();

    public static void Method()
    {
        Console.WriteLine("Hello");
    }
    static void Main(string[] args)
    {
        printer del = delegate { Method(); };
        del();
        Console.ReadKey();
    }
}

さて、私はこの声明を何と呼びますかprinter del = delegate { Method(); };.

ここには名前付きメソッドがあるため、匿名メソッドと呼ぶことはできません。

4

4 に答える 4

9

これは、匿名メソッドと呼ばれます

ここには名前付きメソッドがあるため、匿名メソッドを呼び出すことはできません

@Daniel がコメントで指摘したように、それはまだ匿名メソッドですprinter。同じ署名を持つメソッドを割り当てることによってデリゲートのインスタンスをインスタンス化することです (これはたまたま匿名メソッドです)。次のようにすることで、匿名メソッドの使用を完全に避けることができます。

Printer del = Method;
于 2012-12-03T15:37:00.723 に答える
5

これは、たまたま名前付きメソッドを呼び出している唯一の関数である匿名デリゲートです。

于 2012-12-03T15:37:43.327 に答える
1

これは匿名メソッドです。メソッドの内部は名前付きのメソッドを呼び出しますが、外側のメソッドが匿名であるという事実は変わりません。

del を展開すると、これを簡単に確認できます。

class Program
{
    public delegate void printer();

    public static void MethodA()
    {
        Console.WriteLine("Hello");
    }

    public static void MethodB()
    {
        Console.WriteLine("World");
    }
    static void Main(string[] args)
    {
        bool x = true;

        printer del = delegate 
        {
            if (x)
            {
                MethodA();
            }
            else
            {
                MethodB();
            }
        };

        del();
        Console.ReadKey();
    }
}

デリゲートを使用したくない場合は、アクションで同じことができます。

   Action delA = () => MethodA();
   delA();

Actionパラメータを取らない void を返すメソッドを指します。

于 2012-12-03T15:40:56.253 に答える
1

他の人が言ったように、これは匿名の方法です。

次のコードでも同じことができます。

Action del = () => Method();
del();

delegateこのように、組み込み型を定義して使用する必要はありませんAction

于 2012-12-03T15:39:20.653 に答える