パラメータ リストが異なっていてはなりません。ただし、無名メソッドでは、パラメーター リストを完全に省略してもかまいません。コンパイラは、パラメーター リストがどのように見える必要があるかを既に認識しているため、それを記述する必要はありません。もちろん、パラメータを使用する場合 (通常はそうです)、パラメータを指定して名前を付ける必要があります。
これは次のことを示していると思います。
internal delegate void NoParameters();
internal delegate void SomeParametersThatYouMightNotUse(int i, ref string s, Uri uri);
次に、以下が合法です。
NoParameters f = delegate { Console.WriteLine("Hello"); };
SomeParametersThatYouMightNotUse g = delegate { Console.WriteLine("Hello"); };
( ... )
keyword の後に括弧がないことに注意してくださいdelegate
。
ただし、括弧内のパラメーターを指定する場合は、もちろん、型と一致する必要があります。
NoParameters f = delegate() { Console.WriteLine("Hello"); };
SomeParametersThatYouMightNotUse g = delegate(int i, ref string s, Uri uri) { Console.WriteLine("Hello"); };
いずれの場合も、デリゲートを呼び出すときは、正しいパラメーターを使用してください。
f();
string myString = "Cool";
g(42, ref myString, new Uri("http://stackoverflow.com/"));
この点で、ラムダ式の構文は少し異なります。パラメータは省略できません。ただし、多くの場合、パラメーターの型は省略できます。また、パラメーターが 1 つだけあり、その型を省略した場合は、括弧も省略できます。