Ich habe eine Klasse, die zuerst den abgeleiteten Klassenkonstruktor aufrufen muss, bevor sie den Basiskonstruktor aufruft. Ich weiß, dass der Basiskonstruktor durch den folgenden Code wird zuerst genannt werden:Umgekehrte Reihenfolge der Konstruktoraufrufe durch Erben eines Konstruktors
public class A {
protected A() {
//do something
}
}
public class B : A {
public B() : base() {
//do something else
}
}
Gibt es einen Weg, diese Reihenfolge umzukehren, oder eine Abhilfe für das? Eine der möglichen Lösungen, in der wir eine zusätzliche geschützte Methode in der Basisklasse wie doConstructor() erstellen und sie im abgeleiteten Konstruktor nach der ersten Task aufrufen, ist mit schreibgeschützten Feldern nicht möglich, weil der Compiler sie nicht akzeptiert.
Vorlage Methode Muster – abhilash
Es sieht so aus, als ob Sie den Code von meinem Bildschirm lesen; o) Wir sollten uns jedoch bewusst sein, dass das Aufrufen von virtuellen Mitgliedern von Konstruktoren normalerweise abgeraten wird. –
Der Aufruf von virtuellen Methoden im Basiskonstruktor ('A') ist ein bisschen gefährlich; 'B's Override läuft jetzt ** vor dem Konstruktor von' 'B' ', was zu Problemen mit nicht initialisierten Feldern führen kann. Generell rate ich zur Vorsicht, oder besser: ein ** post ** - ctor 'Initialize'-Schritt. –