Я спостерігав за розмовою Андерса про C # 4.0 та попереднім переглядом C # 5.0 , і це змусило мене задуматися про те, коли додаткові параметри доступні в C #, що буде рекомендованим способом декларування методів, яким не потрібні всі вказані параметри?
Наприклад, щось на зразок FileStream
класу має близько п'ятнадцяти різних конструкторів, які можна розділити на логічні "сімейства", наприклад, такі, що знаходяться внизу з рядка, ті, що знаходяться в an, IntPtr
і ті, що входять до a SafeFileHandle
.
FileStream(string,FileMode);
FileStream(string,FileMode,FileAccess);
FileStream(string,FileMode,FileAccess,FileShare);
FileStream(string,FileMode,FileAccess,FileShare,int);
FileStream(string,FileMode,FileAccess,FileShare,int,bool);
Мені здається, що цей тип шаблону можна спростити, маючи натомість три конструктори та використовуючи необов’язкові параметри для тих, які можуть бути за замовчуванням, що зробило б різні сімейства конструкторів більш чіткими [примітка: я знаю, що ця зміна не буде зроблений у BCL, я гіпотетично кажу про ситуацію такого типу].
Що ти думаєш? З C # 4.0 чи буде більше сенсу робити тісно пов'язані групи конструкторів і методів єдиним методом з необов'язковими параметрами, чи є вагома причина дотримуватися традиційного механізму багатьох перевантажень?