我有一个通用类。它有 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 规范指定一个命名参数。
也欢迎对其他设计提出建议,但请先尝试回答我的问题:)。