C#でデリゲートを作成するとき、明確な署名(パラメーターセット)を持つ関数を指すために、各タイプにも識別子を指定するように求められます。
public delegate void myDelegate(int x, int y);
このプロトタイプ宣言を次のように書き込もうとすると、次のようになります。
public delegate void myDelegate(int, int)
コンパイル時エラーが表示されますidentifier expected
。
しかし、私によれば、メソッドのプロトタイプを指定するだけの場合、署名が異なる2つのメソッドを区別するためにコンパイラーが識別子を必要とするのはなぜですか。
public delegate void firstDelegate(int);
そして
public delegate void secondDelegate(int, int);
それらを区別するための十分かつ明確な宣言です。私はそう思う
私はあなたの人々が私を手に入れたと思いますか?
呼び出しの時点で違いを生む可能性があります。例えば:
using System;
class Test
{
delegate void Foo(int x, int y);
static void Main()
{
Foo foo = (x, y) => Console.WriteLine("x={0}, y={1}", x, y);
foo(x: 5, y: 10);
foo(y: 10, x: 5);
}
}
x=5, y=10
引数は位置ではなく名前を使用するため、出力は両方の行に対応します。C#はC#4で名前付き引数を取得しただけですが、VB.NETはずっと長い間それらを持っていました。
今、もちろんそうではありませんでした持っていることのようであることを。可能性があり、デリゲートが最初の場所で名前付きパラメータを持っていなかったのでように設計されています-しかし、すべて時に、他のあなたのinvoke指名したパラメータは、なぜあなたはデリゲートが異なるようにしたいでしょうか?
ちなみに、インターフェースメソッドと抽象メソッドについても同じことを提案しますか?繰り返しになりますが、パラメーターは単なる署名であるため、宣言内のパラメーターを直接使用することはありません。
パラメータ名は読みやすさの点で役立ち、パラメータをより簡単に文書化できることに注意してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加