我有一個泛型類。它有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規範指定一個命名參數。
其他設計的建議也歡迎,但請嘗試先回答我的問題:)。
_Is沒有一個適合我重載過載preference_的默認法律語言的特點 - @jrummell感謝 – jrummell
號,我懷疑如此。 – tsemer