![]() |
"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. |
Re: "Create" neu definieren
ich muss schon innerhalb des creates 2 strings übergeben!
Deswegen muss ich das Create überschreiben, mit verschiedenen parametern... es muss doch gehen... TIniFile hat auch ein abgeändertes Create! also muss ich das doch auch schaffen können...natürlich dürfen da nachher keine 2 creates existieren... |
Re: "Create" neu definieren
TIniFile ist auch keine komponente.
Ich bin mir nicht sicher ob du das komponenten modell verstanden hast, denn wenn du in dem konstruktor einer komponente unneutrale daten brauchst, dann hasst du verloren oder den design ist fehlerhaft. Beschreib mal genau was du vor hasst, denn meist sieht man den richtigen weg nicht sofort und wir können dann als wegweiser dienen :cyclops: |
Re: "Create" neu definieren
also, meine Klasse (abgeleitet von TCustomServerSocket) soll bereits im create eine datei öffnen, den pfad zur datei muss ich dem create ja mitgeben damit es die datei öffnen kann :\
|
Re: "Create" neu definieren
und warum muss es die datei von anfang an kennen, würde es nicht reichen, wenn du eine property machst und beim setzen dieser die datei geöffnet wird? und dann ein interner status auf 'active' gesetzt wird, der den restlichen operationen sagt, das sie auf der datei arbeiten könenn. Dann wäre es kein problem das als normale komponente zu benutzen.
Wozu soll die datei gut sein? Ab welchem zeitpunkt wird sie wirklich gebraucht? ...dir muss man echt alles aus der nase ziehen :stupid: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 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