![]() |
Vererbung, Create und co
Hallo zusammen,
irgendwas essenzielles hab ich offensichtlich nicht verstanden. Ich habe eine Basisklasse, von der weitere Formulare abgeleitet werden.
Code:
Nun habe ich in der von TBaseClass abgeleiteten Klasse ein onCreate definiert:
type
TBaseClass = Class (TForm) constructor create (aOwner: TComponent); override; protected test: integer; end; constructor TBaseClass.create (aOwner: TComponent); begin inherited create (aOwner); test := -1; end;
Code:
Ich hätte gedacht, dass, vom Compiler, TMainClass.create aufgerufen wird, und das ruft, automatisch, TBaseClass.create auf, ist aber nicht so.
type
TMainClass = Class (TBaseClass) procedure FormCreate (Sender: TObject); end; procedure TMainClass.formCreate (Sender: TObject); begin // ausgabe von test??? sollte -1 sein end; Wo liegt mein Denkfehler? Viele Grüße Marco |
AW: Vererbung, Create und co
Mhh, wird das
Delphi-Quellcode:
vielleicht einfach vom
FormCreate
Delphi-Quellcode:
aufgerufen und somit vor der Zuweisung deiner Variable?
inherited Create
|
AW: Vererbung, Create und co
Zitat:
Früher JA, aber seit paar Jahren "eigentlich" NEIN, außer ![]() Man mag es nicht glauben, aber wenn man den Debugger verwendet, dann sieht man wann und ob was aufgerufen wird. :roll: > Haltepunkt in Create und in FormCreate (OnCreate) |
AW: Vererbung, Create und co
Zitat:
|
AW: Vererbung, Create und co
Hallo zusammen,
ähm, mit dem Debugger ist schon schön, nur landete er, bei mir, nie im create der BaseClass, deshalb kam ich ja auf meine Frage. Ich denke, man darf's einfach nicht mischen. Realisiere ich beides als constructor und rufe im create von MainClass
Code:
auf, funktioniert alles. Gleiches gilt, wenn ich in BaseClass und MainClass ein onFormCreate-Event erstelle, und in dem der MainClass
inherited create (aOwner);
Code:
aufrufe.
inherited;
Ich denke das Problem lag darin, das ich onCreate und create quasi gemischt hatte, obwohl mir immernoch, aber das wäre nur eine Verständnisfrage, nicht klar ist, warum das dann nicht geht. Herzliche Grüße Marco |
AW: Vererbung, Create und co
Zitat:
Wenn du allerdings nie im Create der Basisklasse landest, ist irgendetwas anderes faul (oder du hast einfach nicht lange genug debugged). |
AW: Vererbung, Create und co
Also wenn OnCreate im Create-Inherited aufgerugfen wird (altes Verhalten:
Der Speicher für die Instanz wird bereits vor dem Create reserviert, aber die DFM und die Form-Komponenten werden erst im Inherited geladen.
Delphi-Quellcode:
In "neueren" Delphies wird standardmäßig das OnCreate im
constructor TBaseClass.create (aOwner: TComponent);
begin test := -1; inherited create (aOwner); end; ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz