Einen Konstruktor von einem anderen Konstruktor in derselben Klasse aufrufen

7

Ich habe eine Klasse mit zwei Konstruktoren (C #). Hier ist das Code-Snippet:

%Vor%

Ja, ich weiß, dass ich einen Konstruktor unter Verwendung des oben genannten Ansatzes von einem anderen Konstruktor aufrufen kann. Aber in diesem Szenario, wenn ich Konstruktor 2 aufrufen, werden alle Anweisungen in Konstruktor 1 ausgeführt, bevor die Anweisung in Konstruktor 2 ausgeführt wird.

Was ich will ist, dass nachdem alle Anweisungen in Konstruktor 2 ausgeführt wurden, dann ruft er den Konstruktor 1 auf.

In meiner exakten Situation mache ich Benutzerauthentifizierung. 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 nun 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 nicht implementiert ist:

%Vor%     
Farhan 20.06.2012, 15:27
quelle

5 Antworten

7

Verwenden Sie in diesem Fall keine Konstruktoraufrufe, sondern etwas wie:

%Vor%

Wo ich vermutete, dass Init1(..) und Init2(..) Methoden sind, die sich auf eine bestimmte Initialisierungslogik des entsprechenden Konstruktors beziehen.

Tatsächlich können Sie diese Funktionsaufrufe so arrangieren, dass sie Ihren Anforderungen besser entsprechen.

    
Tigran 20.06.2012, 15:31
quelle
8

Sie können eine andere private Methode verwenden, um die Initialisierung durchzuführen:

%Vor%     
Ry︁ 20.06.2012 15:33
quelle
2

Im Allgemeinen könnten Sie das verwenden:

%Vor%     
Marco 20.06.2012 15:30
quelle
2

Warum nicht diese Funktionalität in einige method einbinden und das in den Bausteinen (oder wo immer du willst) aufrufen?

%Vor%

Dies ist eine generische Lösung. Sie können den Rückgabetyp entsprechend Ihrem spezifischen Szenario ändern.

    
Shyju 20.06.2012 15:30
quelle
1

Bester Ansatz - setzen Sie diese Logik nicht in den Konstruktor. Teilen Sie es mit anderen Methoden auf, die Sie nach Belieben aufrufen können, ohne sich Gedanken über die Verkettung von Konstruktoren machen zu müssen.

    
Ryan Bennett 20.06.2012 15:31
quelle

Tags und Links