私はジェネリッククラスを持っています。2 つのコンストラクターがあります。これらは私の組織のコードベースで広く使用されています。
class MyClass<T> {
MyClass() { ... }
MyClass(T defaultValue) { ... }
}
いくつかの機能を追加したいが、下位互換性を維持したい。そこで、各コンストラクターに新しいブール値のオプション パラメーターを導入したいと思います。
class MyClass<T> {
MyClass(bool someFlag = false) { ... }
MyClass(T defaultValue, bool someFlag = false) { ... }
}
ただし、 T がブール値であり、デフォルト値が渡される使用法がすでに山ほどあります。
class Usage {
MyClass<bool> Booly = new MyClass<bool>(false);
}
現在、オーバーロード優先の法則に従ってsomeFlag
、型付きメソッドは「よく知っている」ため、コンパイラはそのようなコンストラクターの使用をすべてオーバーロードを受け入れるオーバーロードに結び付けています。ほとんどの場合、これは完全に理にかなっていますが、これは明らかに私の下位互換性を壊しています。
私の質問は簡単です:オーバーロード設定のデフォルトの法則をオーバーライドし、古いジェネリック オーバーロードを優先するものとして定義する言語機能はありますか?
もちろん、この設計の欠点は、(パラメーターのみで) 最初のオーバーロードを呼び出したいときはいつでも、someFlag
C# 4 仕様に従って名前付きパラメーターを指定する必要があることです。
他のデザインの提案も大歓迎ですが、まず私の質問に答えてみてください :)。