次の 2 つの ctor があるとします。
public SomeClass(string a, Color? c = null, Font d = null)
{
// ...
}
public SomeClass(string a, Font c = null, Color? d = null)
{
// ...
}
~そして私はこうします:
SomeClass sc = new SomeClass("Lorem ipsum");
次のようなメッセージが表示されます: 「エラー 1 次のメソッドまたはプロパティ間の呼び出しがあいまいです [...]」
どちらを参照しても最終結果は同じなので、どちらを参照しても問題ないと思われます (少なくともこの特定のケースでは、私にとってはそれが今重要なすべてです)。では、これを回避するにはどのような選択肢があるでしょうか?
編集 1: @oltman: 簡略化された例。
ただ書けるようになりたい
[...] new SomeClass("Lorem", Color.Green)
の代わりに
[...] new SomeClass("Lorem", null, Color.Green)
ベストアンサー1
両方のコンストラクターは同じ数の引数を取りますが、順序が異なります。 2 つのコンストラクター パラメーターに既定値を指定しているため、2 番目の引数が指定されていない場合、コンパイラは 2 つのオーバーロードを区別できません。
既存のコンストラクターを削除し、次のものに置き換えることをお勧めします。
public SomeClass(string a, Color? color, Font font)
{
// constructor implementation
}
public SomeClass(string a) : this(a, null, null) {}
public SomeClass(string a, Color color) : this(a, color, null) {}
public SomeClass(string a, Font font) : this(a, null, font) {}