![]() |
"Create" neu definieren
hi,
ich möchte das Create meiner vorgängerklasse (constructor Create(AOwner: TComponent); override) neu definieren, also mit mehreren parametern. Ca. so:
Delphi-Quellcode:
nur gibt es da ein problem, override funktioniert nicht, da sich die parameter ja unterscheiden... ohne override kann ich aber auch kein inherited aufrufen oder? was kann ich da nun tun?
constructor Create(AOwner: TComponent; ServerName, ServerDesc: string);
|
Re: "Create" neu definieren
Du kannst inherited auch aufrufen, ohne deinen Konstruktor die override-Direktive zu verpassen, aber wenn du den Konstruktor deiner Vorgängerklasse neu defnieren willst, musst du eben diese neu schreiben.
|
Re: "Create" neu definieren
folgendes dürfte funzen:
Delphi-Quellcode:
obs das Create(AOwner: TObject); braucht, weiß ich nicht. Aber so gehste sicher, dass nur der neue constructor verwendet werden kann.
myClass = class(TObject)
protected constructor Create(AOwner: TObject); override; public constructor Create(AOwner: TObject; Wasauchimmer: integer); overload; end; //... constructor myClass.Create(AOwner: TObject); begin inherited; end; constructor myClass.Create(AOwner: TObject; Wasauchimmer: integer); begin Create(AOwner); end; Habs aber nicht ausprobiert. Vielleicht gehts aber auch ohne override ganz einfach mit dieser Zeile als aufruf für den alten constructor
Delphi-Quellcode:
begin
inherited Create(AOwner); end; |
Re: "Create" neu definieren
der alte Constructor muss nicht unbedingt überschrieben werden, es reicht wenn im neuen wie schon geschrieben
Delphi-Quellcode:
steht
inherited Create(AOwner);
|
Re: "Create" neu definieren
Moin Chimaira,
Dein Beispiel kann leider nicht funktionieren, da Du die Sichtbarkeit des Konstruktors verringern willst. (Ein Konstruktor dürfte wohl immer public sein) |
Re: "Create" neu definieren
Zitat:
Delphi-Quellcode:
im constructor den eigentlichen constructor der vorgänger-klasse aufrufen
inherited Create(AOwner);
|
Re: "Create" neu definieren
ich meinem buch steht, dass wenn man kein override benutzt der (in diesem fall) constructor neu definiert wird d.h der vorrige existiert nichtmehr, wie geht das dann mit inherited?
demnach wäre es ja garkein unterschied ob ich:
Delphi-Quellcode:
oder
constructor Create(AOwner: TComponent; ServerName, ServerDesc: string); reintroduce
Delphi-Quellcode:
verwende... in beiden fällen dürfte das mit "inherited" nicht gehen oder(dazu gibts ja override...)?
constructor Create(AOwner: TComponent; ServerName, ServerDesc: string);
|
Re: "Create" neu definieren
Zitat:
und wenn ich jetz nich wieder blödsinn erzählt hab, nimm reintroduce und alles is gut :stupid: :wink: |
Re: "Create" neu definieren
hoi,
ich möchte aber ausserhalb meiner klasse nicht 2 verschiedene "create" aufrufen können *g* ich will 1 abgeändertes Create, mehr nicht, wie gehtn das :'( |
Re: "Create" neu definieren
Zitat:
Und da stellt siche auch schon die nächste frage: Da es sich ja offensichtlich um eine komponente handelt, würde im normalen gebrauch (komponente im formular -> DFM streaming), so oder so der normale virtuelle konstruktor, der basisklasse (TComponent), aufgerufen werden. Also wozu soll der dienen? Wenn du ihn für manuelle erzeugung benutzt, dann bleibt dir nix weiter übrig als zwei überladene Konstruktoren zu haben, oder darauf zu verzichten. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:58 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