Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekt funktion override (https://www.delphipraxis.net/143875-objekt-funktion-override.html)

guinnes 25. Nov 2009 11:17

Re: Objekt funktion override
 
Zitat:

Zitat von mkinzler
Mir scheint diese Vorgehensweise auch nicht unbedingt optimal zu sein

Ganz sicher nicht. Wenn er zur Laufzeit ein anderes Clear braucht, warum bearbeitet er dann die Liste nicht einfach von außen ? Ich zwar nicht OOP, aber das Überschreiben zur Laufzeit sicherlich auch nicht

Gruber_Hans_12345 25. Nov 2009 11:32

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:
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.
... 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 ...

guinnes 25. Nov 2009 11:56

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 )

Gruber_Hans_12345 25. Nov 2009 12:12

Re: Objekt funktion override
 
Zitat:

Zitat von guinnes
1. Hast du es schon mal mit override versucht ?
2. Warum nimmst du keine ObjectList, da ist Clear so implementiert. ( wenn OwnsObjects True ist )

ja habs schon mit override probiert, nur das kennt ja leider mein interpreter noch nicht, das wollte ich ihm ja gerade beibringen ....

nicht zu vergessen, das ist ein SCRIPT was in einem INTERPRETER läuft, und kein Delphi code!!!

hoika 25. Nov 2009 12:15

Re: Objekt funktion override
 
Hallo,

Delphi-Quellcode:
for i:=0 to Count-1 do Item[i].Free;
jefährlich ...

besser

Delphi-Quellcode:
for i:= Count-1 downto 0 do Item[i].Free;
Ich hatte mir übrigens damals eine neue Methode ClearList definiert,
die im Destructor aufgerufen wurde.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:30 Uhr.
Seite 2 von 2     12   

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