![]() |
Constructor einer TForm überschreiben
Hallo und ein frohes neues Jahr @ all :party:
Ich hab da ein Problem. Ich möchte in einem TForm-Nachkommen dem Konstruktor einen Parameter übergeben, mit dem ein Read-Only Wert gesetzt wird.
Delphi-Quellcode:
Das führt zu folgender Compiler-Fehlermeldung: "Deklaration von 'Create' unterscheidet sich von vorheriger Deklaration". Stimmt zwar, aber wo ist das Problem? Warum in Gottes Namen müssen die Parameterlisten identisch sein? Wie soll ich diesen Read-Only Wert sonst initialisieren?
TMyForm = class(TForm)
private FReadOnly: TReadOnly; public constructor Create(AOwner: TComponent; Value: TReadOnly); override; published property ReadOnly: TReadOnly read FReadOnly; end; constructor TMyForm.Create(AOwner: TComponent; Value: TReadOnly); begin inherited Create(AOwner); FReadOnly := Value; end; Wenn ich das "override" weglasse, erscheint diese Warnung: "Methode 'Create' verbirgt virtuelle Methode vom Basistyp 'TCustomForm'". Wenn ich es richtig deute, heißt das, dass kein Zugriff mehr auf die Basismethoden besteht, d.h.
Delphi-Quellcode:
wäre nicht möglich bzw. würde nichts bewirken.
inherited Create(AOwner);
Oder doch? Hilfä :gruebel: Vielen vielen Dank schonmal fürs lesen! Gruß, Dani |
Re: Constructor einer TForm überschreiben
schreib ein reintroduce; dahinter, dann müsstest du auch noch auf die inherited zugreifen können und der compiler wirft dir keine meldung mehr..
|
Re: Constructor einer TForm überschreiben
auf den inherited Constructor kommst du trotzdem weiterhin drauf. Es bedeutet nur das du ohne inherited nicht mehr drauf zugreifen kannst weil dein neuer Constructor den gleichen Name hat und somit den virtuellen Constructor mit seinem Namen überdeckt. Das Reintroduce bewirkt dabei das die Compilermessage unterdrückt wird (du machst dem Compiler also Klar das du weißt was du tust (reintroduce ist nicht notwendig da es nur die warnung unterdrückt))
|
Re: Constructor einer TForm überschreiben
Alles klar, der Compiler schweigt und inherited funktioniert wie vorher auch. Danke nochmal!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:59 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-2025 by Thomas Breitkreuz