using System;
public delegate void Printer(string s);
class Program
{
public static void Main(string[] args)
{
Printer p = new Printer(delegate {});
p+= myPrint;
p("Hello");
Console.ReadKey(true);
}
public static void myPrint(string s)
{
System.Console.WriteLine(s);
}
}
+=
後で使用できるように、空の無名関数でデリゲートを初期化する必要があるようです。new
句を省略すると、動作p
するようになりnull
、+=
動作しなくなります。これは理にかなっています。
これで、デリゲートインスタンスを持つクラスがある場合、次のことができます。
using System;
public delegate void Printer(string s);
class Program
{
public static void Main(string[] args)
{
A a = new A();
a.p += myPrint;
a.p("Hello");
Console.ReadKey(true);
}
public static void myPrint(string s)
{
System.Console.WriteLine(s);
}
}
class A {
public Printer p;
}
なぜこれが許可されるのですか?デリゲートインスタンスのデフォルト値はありますp
か?その場合null
、を使用して新しいコールバックを割り当てることができないため、それはできません+=
。キーワードでこの問題を検索しようとしましたが、"default value for delegates"
何も見つかりませんでした。また、質問が基本的すぎる場合は申し訳ありません。
ご協力いただきありがとうございます!