![]() |
Objekt funktion override
Ich möchte gerne ZUR LAUFZEIT bei einem besteheneden Objekt eine funktion "override"
Vereifacht gesagt:
Delphi-Quellcode:
nun brauche ich eine Funktion, die es schaft irgendwie die MyClear als neue Clear funktion zu definiern.
type
TMyList = class(TList) private procedure MyClear; end; procedure TMyList.MyClear; begin // end; Das ganze wird dann später zur Laufzeit aus einer art Interpreter generiert werden ... Deshalb suche ich nun infos zu sowas .... bin für alles dankbar |
Re: Objekt funktion override
Ich versthe deine Frage nicht. Könntest du dein Anliegen genauer beschreiben?
|
Re: Objekt funktion override
Ok, ich versuche es
Ich muß zur Laufzeit eine "normale" TList erzeugen. und für dieses eine Objekt muß ich es schaffen, das ich eine Methode, sagen wir die Clear methode überschreiben kann. Das verhalten sollte so sein, wie wenn ich ein neuen Typ deklarieren würde. |
Re: Objekt funktion override
Das wird schwer mann könnte aber den Originaltyp mit dem abgeleiteten Typ überlagern.
|
Re: Objekt funktion override
Definier MyClear als VIRTUAL
und die Virtual-Method-List könnte man auch zur Laufzeit bearbeiten. Auch wenn ich jetzt nicht verstehe, warum du das so machen willst ... könnte mir vorstellen, dß es einen anderen/besseren Weg gäbe, wenn wir wüssten, was damit erricht werden soll. |
Re: Objekt funktion override
Hmmm.... Ich müsste irgendwie wissen, wie Delphi intern das mit dem override macht, gibt es dafür irgendwelche Sprungtabellen, die man da bearbeiten kann?
Das Problem ist, ich weiss erst zur laufzeit, das die funktion clear "override"n werden möchte. |
Re: Objekt funktion override
Zitat:
|
Re: Objekt funktion override
Mir scheint diese Vorgehensweise auch nicht unbedingt optimal zu sein
|
Re: Objekt funktion override
Und wenn man Clear auf jeden Fall überschreibt und bei Nichtbedarf einfach inherited Clear aufruft?
|
Re: Objekt funktion override
An sowas hatt ich auch gedacht. Könnte man auch mit der Überlagerung kombinieren um diese Änderungen auf TList anzuwenden
|
Re: Objekt funktion override
Zitat:
|
Re: Objekt funktion override
Das Problem ist, es handelt sich um einen interpreter, der natürlich zur laufzeit sachen erzeugt und das override von funtkionen bringe ich nicht zum laufen, da mir hier etwas der plan fehlt
so ein script sieht dann zb so aus
Delphi-Quellcode:
... und das Clear schaffe ich nicht, das er mir nun aufruft, weil ich nicht weiss ob und wie ich mich hier zwischen delphi hängen kann ...
unit testinterpreterv3;
type TProzessItem = class private fTyp : integer; Name : string; public constructor Create; override; destructor Destroy; override; procedure Show; end; TProzessList = class(TList) private myCount : integer; public constructor Create; override; destructor Destroy; override; procedure Clear; function FindByTyp(Typ : integer) : TProzessItem; function AddTyp(Typ : integer; Name : string) : TProzessItem; end; constructor TProzessItem.Create; begin ShowMessage('TProzessItem.Create'); end; destructor TProzessItem.Destroy; begin ShowMessage('TProzessItem.Free'); end; constructor TProzessList.Create; begin myCount := 0; ShowMessage('ProzessList.Create'); end; destructor TProzessList.Destroy; begin ShowMessage('ProzessList.Free'); end; procedure TProzessList.Clear; var i : integer; begin for i:=0 to Count-1 do Item[i].Free; inherited; end; function TProzessList.AddTyp(Typ : integer; Name : string) : TProzessItem; begin Result := TProzessItem.Create; Result.fTyp := Typ; Result.Name := Name; Add(Result); myCount := myCount + 1; end; function TProzessList.FindByTyp(Typ : integer) : TProzessItem; var i : integer; begin Result := nil; for i:=0 to Count-1 do if Items[i].fTyp = Typ then begin Result := Items[i]; break; end; end; procedure TProzessItem.Show; begin ShowMessage(Name); Name := Name + 'test'; end; function main : integer; var x : TProzessItem; x2 : TProzessItem; li : TProzessList; begin li := TProzessList.Create; x := li.AddTyp(1, 'test'); li[0].Show; li.FindByTyp(1).Show; ShowMessage(myCount.Count); li.Free; end; end. |
Re: Objekt funktion override
1. Hast du es schon mal mit override versucht ?
2. Warum nimmst du keine ObjectList, da ist Clear so implementiert. ( wenn OwnsObjects True ist ) |
Re: Objekt funktion override
Zitat:
nicht zu vergessen, das ist ein SCRIPT was in einem INTERPRETER läuft, und kein Delphi code!!! |
Re: Objekt funktion override
Hallo,
Delphi-Quellcode:
jefährlich ...
for i:=0 to Count-1 do Item[i].Free;
besser
Delphi-Quellcode:
Ich hatte mir übrigens damals eine neue Methode ClearList definiert,
for i:= Count-1 downto 0 do Item[i].Free;
die im Destructor aufgerufen wurde. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:45 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