Ich habe eine Klasse mit zwei Konstruktoren (C#). Hier ist der Code-Schnipsel:Einen Konstruktor von einem anderen Konstruktor in derselben Klasse aufrufen
public class FooBar()
{
public FooBar(string s)
{
// constructor 1, some functionality
}
public FooBar(int i) : this("My String")
{
// constructor 2, some other functionality
}
}
Ja, ich weiß, dass ich einen Konstruktor aus einem anderen nennen kann den oben genannten Ansatz. Wenn ich jedoch in diesem Szenario Konstruktor 2 aufrufe, werden alle Anweisungen in Konstruktor 1 ausgeführt, BEVOR die Anweisung von sehr genau in Konstruktor 2 ausgeführt wird.
Was ich will, ist, dass, nachdem alle Aussagen in Konstruktor 2 laufen, dann wird es Konstruktor 1.
In meine genaue Situation nennen, ich Benutzerauthentifizierung tue. Konstruktor 1 ruft Benutzerinformationen nur mit der Benutzer-ID ab, aber Konstruktor 2 führt die Benutzerauthentifizierung mit E-Mail und Kennwort durch. Wenn ein Benutzer in der Datenbank ist, erhält er die Benutzer-ID, und jetzt möchte ich, dass Konstruktor 1 alle Eigenschaften der Klasse auffüllt.
Bitte lassen Sie mich wissen, wenn Sie zusätzliche Informationen benötigen. Wenn Sie denken, dass es einen anderen besseren Ansatz gibt, würde ich gerne den Vorschlag hören.
UPDATE 1: Ich frage mich, warum so etwas wie dieses nicht implementiert ist:
public FooBar(bool b)
{
// constructor 3, some more functionality
this.FooBar("My String"); // calling constructor 1
}
Interessante scenerio. Sie können die Funktionalität in eine separate Funktion verschieben oder einen überladenen Konstruktor 'FooBar (string s, int i)' erstellen. Vielleicht nicht die beste Lösung, aber nur ein paar Ideen rauswerfen. – Justin
@Justin, Logik in eine andere Methode zu setzen scheint eine bessere Idee zu sein. Vielen Dank. – Farhan