Mam klasy z dwoma konstruktorami (C#). Oto fragment kodu:Wywołanie konstruktora z innego konstruktora w tej samej klasie
public class FooBar()
{
public FooBar(string s)
{
// constructor 1, some functionality
}
public FooBar(int i) : this("My String")
{
// constructor 2, some other functionality
}
}
Tak, wiem, że mogę wywołać jednego konstruktora z innego przy użyciu wyżej wymienionego podejścia. Ale w tym scenariuszu, jeśli wywołasz konstruktora 2, wszystkie instrukcje w konstruktorze 1 będą działały PRZED wykonaniem samego polecenia w konstruktorze 2.
Co chcę jest, że po wszystkie dane przedstawione w konstruktorze 2 są prowadzone, to będzie wywołanie konstruktora 1.
W moim dokładnym sytuacji, robię uwierzytelnienia użytkownika. Konstruktor 1 pobiera informacje o użytkowniku za pomocą samego identyfikatora użytkownika, ale konstruktor 2 dokonuje uwierzytelnienia użytkownika za pomocą adresu e-mail i hasła. Jeśli użytkownik jest w bazie danych, otrzymuje identyfikator użytkownika, a teraz chcę, aby konstruktor 1 wypełniał wszystkie właściwości klasy.
Proszę dać mi znać, jeśli potrzebujesz dodatkowych informacji. Jeśli uważasz, że istnieje inne lepsze podejście, chętnie wysłucham sugestii.
UPDATE 1: Zastanawiam się, dlaczego coś takiego nie jest realizowany:
public FooBar(bool b)
{
// constructor 3, some more functionality
this.FooBar("My String"); // calling constructor 1
}
Ciekawe scenerio. Możesz przenieść funkcjonalność w oddzielnej funkcji lub zrobić przeciążony Konstruktor 'FooBar (string s, int i)'. Może nie być najlepszym rozwiązaniem, ale po prostu wyrzucać kilka pomysłów. – Justin
@Justin, wprowadzenie logiki w innej metodzie wydaje się być lepszym pomysłem. Dzięki. – Farhan