Wenn Sie einen Klassenkonstruktor in einer Basisklasse definieren (dh eine statische Klassenvariable setzen), ist es möglich, diesen Klassenkonstruktor in einer abgeleiteten Klasse zu überschreiben und den Konstruktor von seinem hierarchischen Elternteil mit geerbt ?
Beispiel:
%Vor%Es gibt keinen Grund für Klassenkonstruktoren , virtuell zu sein, da sie nicht polymorph aufgerufen werden können. Sie können sie nicht direkt anrufen; Je nachdem, welche Klassen in einem Programm verwendet werden, fügt der Compiler automatisch Aufrufe an sie ein. Virtuelle Methoden dienen zur Laufzeitpolymorphie, aber da der Compiler genau weiß, welche Klassenkonstruktoren er zur Kompilierungszeit aufruft, ist kein dynamischer Dispatch für Klassenkonstruktoren oder Destruktoren erforderlich.
Virtuelle Methoden sind jedoch für die Vererbung nicht erforderlich, daher sollte es kein Problem geben, inherited
in einem Klassenkonstruktor oder Klassendestruktor zu verwenden. Wie Davids Antwort darauf hinweist, ignoriert der Compiler Aufrufe von inherited
, da es in der Regel unklug ist, eine Klasse mehrmals zu initialisieren , was Sie tun würden, wenn Sie wirklich den geerbten Klassenkonstruktor aufrufen würden. Wenn es etwas gibt, was du zweimal tun musst, musst du einen anderen Weg finden, um es umzusetzen.
Da Klassenkonstruktoren nicht virtuell sein können (es ist nicht sinnvoll, dass sie virtuell sind), müssen Sie zuerst die Schlüsselwörter virtual
und override
entfernen, damit der Code kompiliert werden kann.
Klassenkonstruktoren werden normalerweise zum Initialisieren von Klassenvariablen verwendet. Klassenvariablen müssen typischerweise einmal und nur einmal initialisiert werden. Wenn Sie inherited
so aufrufen könnten, wie Sie es in der Frage vorgeschlagen haben, wird TBaseClass.ClassCreate
mehrmals aufgerufen, obwohl es genau einmal aufgerufen werden muss.
Während Sie inherited
in einen Klassenkonstruktor schreiben können und der Code kompiliert wird, ignoriert der Compiler ihn einfach.
Beachten Sie, dass beide Klassenkonstruktoren natürlich ausgeführt werden.
Tags und Links delphi delphi-xe2