Я смотрел разговор Андерса о C # 4.0 и предварительный просмотр C # 5.0 , и это заставило меня задуматься о том, когда в C # доступны дополнительные параметры, что будет рекомендуемым способом объявления методов, которые не нужны все указанные параметры?
Например, что-то вроде FileStream
класса имеет около пятнадцати различных конструкторов, которые можно разделить на логические «семейства», например. те, что ниже от строки, те, что из IntPtr
, и те, что из 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, будет ли разумнее делать тесно связанные группы конструкторов и методов единым методом с необязательными параметрами или есть веская причина придерживаться традиционного механизма многократной перегрузки?