たとえば、複素数を表現するためにComplex
クラスを定義しているとします。 Iは、例えば書くことができるように、私は、2つのコンストラクタを定義したい:C#:同じ署名メソッド/コンストラクタと名前付き引数
Complex z1 = new Complex(x: 4, y: 3);
Complex z2 = new Complex(r: 2, theta: Math.PI/4);
しかし、私はこのようなコンストラクタを定義することはできません:両方のコンストラクタは、同じシグネチャを有することになるので
public Complex(double x, double y) { ... }
public Complex(double r, double theta) { ... }
を、その許可されていません。しかし、C#4で、私はオプションの引数を使用して、これを書くことができます。
public Complex(double x, double y) { ... }
public Complex(double r, double theta, bool unused=true) { ... }
をそれは動作しますが、私はその後、意図したとおり上記のコンストラクタの呼び出しを使用することができます。 unused
引数の唯一の目的は、シグネチャを異なるものにすることです。定義時とコンストラクタ呼び出し時の両方で、まったく使用されていません。
私にとってこれは醜いトリックだと思われます。それ以上の選択肢はありますか?
これは本当にあなたに何も買わない - あなたは2つの二重の引数(それは常に同じものになります)で呼び出されるかどうかは制御できません。 –
あなたが正しいですが、私の目的は、名前付き引数のおかげで使用したいコンストラクタを明示的に選択することです。 – ChrisJ