Powiedzmy mam następujące konstruktory dla Foo
w C#:Warunkowo wywołanie konstruktora w C#
public Foo()
{
// ...
}
protected Foo(bool connect)
: this()
{
// ...
}
szukam sposobu, aby tylko wykonać this()
część gdy parametr connect
jest true
. Czy jest to sposób na zrobienie tego?
(Dla ciekawskich: powodem jest to, że klasa Foo
tworzy obiekty, które łączą się z określonymi rzeczami, a kiedy są tworzone, powinny również zawsze próbować się łączyć, a teraz tworzę emulator (lub MOCK) dla tego, co rozszerza klasę Foo
.Do tego dodam konstruktora protected
dla, gdy ten jest używany, powinna istnieć opcja, aby nie utworzyć rzeczywistego połączenia. Chcę to zaimplementować przy zmianie klasy Foo
jako . trochę jak to możliwe)
Ja osobiście faworyzuję to podejście. Pozwala to uniknąć wady wywoływania metody innej niż konstruktor, która polega na tym, że pola 'readonly' nie mogą być inicjowane w nie-konstruktorze. Skaluje się również do wielu konstruktorów (z których każdy może wywołać konstruktor chroniony lub nawet prywatny "master") - chociaż wywołanie metody init() również się skaluje. –
Tak, właściwie myślę, że to też najlepszy sposób. –
Biorąc pod uwagę to, co powiedział @MatthewWatson, jest to prawdopodobnie poprawna odpowiedź. Dzięki! –