Oglądałem rozmowę Andersa o C # 4.0 i zapowiedź C # 5.0 i pomyślałem o tym, kiedy parametry opcjonalne są dostępne w C #, jaki będzie zalecany sposób deklarowania metod, które nie wymagają określenia wszystkich parametrów?
Na przykład coś takiego jak FileStream
klasa ma około piętnastu różnych konstruktorów, które można podzielić na logiczne „rodziny”, np. Te poniżej ze stringa, te z an IntPtr
i te z 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);
Wydaje mi się, że ten typ wzorca można by uprościć, mając zamiast tego trzy konstruktory i używając opcjonalnych parametrów dla tych, które mogą być domyślne, co uczyniłoby różne rodziny konstruktorów bardziej odrębnymi [uwaga: wiem, że ta zmiana nie będzie wykonane w BCL, mówię hipotetycznie o tego typu sytuacjach].
Co myślisz? Czy od C # 4.0 bardziej sensowne będzie uczynienie blisko spokrewnionych grup konstruktorów i metod jedną metodą z opcjonalnymi parametrami, czy też jest dobry powód, aby trzymać się tradycyjnego mechanizmu wielokrotnego przeciążenia?