匿名メソッドのように、「delegate」キーワードを使用して宣言しているデリゲートは匿名のデリゲートですか?
namespace Test
{
public delegate void MyDelegate();
class Program
{
static void Main(string[] args)
{
DelegateTest tst = new DelegateTest();
tst.Chaining();
Console.ReadKey(true);
}
}
class DelegateTest
{
public event MyDelegate del;
public void Chaining()
{
del += delegate { Console.WriteLine("Hello World"); };
del += delegate { Console.WriteLine("Good Things"); };
del += delegate { Console.WriteLine("Wonderful World"); };
del();
}
}
}
この例のデリゲートコレクションは、いくつかの匿名メソッドを指しています。デリゲートは「単なるメソッドポインタ」です。実際のメソッドを指しているのか、匿名メソッドを指しているのかは関係ありません。
http://msdn.Microsoft.com/en-us/library/0yw3tz5k(VS.80).aspx を参照してください。
「匿名デリゲート」のようなものはありません(つまり、C#仕様、または私が知っている他の.NET関連の仕様で認識されている用語ではありません)。
匿名メソッドとラムダ式を含む無名関数があります。
あなたのコードは、単純な古い無名メソッドを示しています-それらはareラムダ式にはない1つの機能を使用しています:パラメーターを気にしないときにパラメーターをまったく表現しない機能。
正解です。イベントに多数の匿名メソッドを割り当てました。
新しいバージョンのc#を使用している場合は、ラムダでも同様のことができます。例えば:
class DelegateTest
{
public event Action del;
public void Chaining()
{
del += () => Console.WriteLine("Hello World");
del += () => Console.WriteLine("Good Things");
del += () => Console.WriteLine("Wonderful World");
del();
}
}
あなたの代理人は匿名ではありません。それはMyDelegateと呼ばれます。 CLRのデリゲートは、System.MulticastDelegateから派生したクラスであり、この場合はMyDelegateと呼ばれます。 MulticastDelegateから直接派生することはできません。C#コンパイラが停止します。
デリゲートをdelに割り当てるコードでは、デリゲートのタイプ/名前は、タイプMyDelegateのイベントとしてdelを宣言したため、コンパイラーによって推測されます。
はい、彼らは匿名のデリゲートです(または、より具体的には、 匿名メソッドを呼び出すデリゲート )。
はい。匿名のデリゲートは名前で直接参照できないため、delegate(){}
構文を使用すると匿名になります。
彼らは匿名メソッドへのデリゲートです。これは、匿名メソッドを作成する1つの方法であり、.NET2.0以降で使用可能でした。 .NET 3.0では、記述が簡単なラムダ式を使用することもできます(ただし、同じコードにコンパイルします)。それが「匿名メソッド」の意味だと思います。しかし、実際には、それらは同じものです。