Wiem, że nie jest możliwe dziedziczenie konstruktorów w języku C#, ale prawdopodobnie istnieje sposób, aby zrobić to, co chcę zrobić.C#: dziedziczenie konstruktorów
Posiadam klasę podstawową, która jest dziedziczona przez wiele innych klas, i ma metodę Init
, która wykonuje kilka inicjalizacji przyjmujących 1 parametr. Wszystkie inne klasy dziedziczące również potrzebują tego inicjalizacji ale będę musiał utworzyć osobne konstruktorów dla nich wszystkich, którzy chcieliby w ten sposób:
public Constructor(Parameter p) {
base.Init(p);
}
To całkowicie narusza suchej zasady! Jak mogę zainicjować wszystkie potrzebne rzeczy bez tworzenia kilkudziesięciu konstruktorów?
Gorsze niż naruszanie zasad DRY stanowi naruszenie zasady niezmienności. "Init" jako nazwa metody jest generalnie silnym znakiem, że obiekty są niepotrzebnie obecne w nieważnych stanach, w których jedyną rzeczą, na której są one dobre, jest powodowanie błędów. –
C# in wcale nie podąża za DRY. Może to być uciążliwe, ale ... szczerze mówiąc, nie możesz mi powiedzieć, że nie jesteś zmęczony pisaniem "publicznych", "chronionych" i "prywatnych" w kółko i na okrągło? –
@ SlippD.Thompson: To kolejny obszar, w którym C++ jest faktycznie * mniej * bardziej rozwlekły niż łatwiejsze języki ... Poprzedni, który właśnie widziałem, dotyczył eksponowania konstruktorów bazowych w klasie pochodnej. –