![]() |
Re: Instanz einer Klasse identifizieren?!
Hallo
Erstmal Vielen Dank. Ich habe jetzt noch ein bisschen rumprobiert und mir folgedes überlegt.
Delphi-Quellcode:
Ich habe mir dadurch ale eine Klasse geschaffen, ähnlich wie die TObjectList, die meine Elemente aufnimmt. Ich habe dort jetzt auch eine globale Variable, aber damit könnte ich erstmal leben. Allerdings stellt sich dann die Frage ob ich dort folgendes:
unit Unit2;
interface type TArray = array [1..10] of string; TTest = class private public class procedure Add(ID: integer; text: string); class function Read(ID: integer): string; end; var MeinArray: TArray; implementation class procedure TTest.Add(ID: integer; text: string); begin MeinArray[ID]:= text; // An dieser Stelle könnte dann ja auch sowas stehen wie // MeinArray[ID].Create('Test') ... Wenn das Array von einem von mir wiederrum // selbst erstellten Typ z. B. TTest ist mit constructor end; class function TTest.Read(ID: integer): string; begin result:= MeinArray[ID]; end; end.
Delphi-Quellcode:
von NicoDE benutzen kann?
{$WRITEABLECONST ON}
var MeinArray: TArray; {$WRITEABLECONST OFF} Oder hat mein obiger Code überhaut irgendeinen Nachteil? Vielen Dank? |
Re: Instanz einer Klasse identifizieren?!
Zitat:
Du musst Dich um die Freigabe der Objekte im Array selbst kümmern |
Re: Instanz einer Klasse identifizieren?!
Du kannst die Sichtbarkeit der Variablen noch verringern.
Delphi-Quellcode:
implementation
var MeinArray: TArray; // Sichtbarkeit = restliche Unit Zitat:
|
Re: Instanz einer Klasse identifizieren?!
So toll auch Arrays sind, für eine Struktur Variabler Länge sind sie völlig ungeeignet. Natürlich kann man sich jetzt totdiskutieren, das Listen und Bäume häufig auch nur auf Arrays aufsetzen, aber die sind ja auch schon gekapselt. Am einfachsten ist es für die wirklich auf eine Liste zurueckzugreifen. Und siehe da, die TObjectList unterstützt sogar den wahlfreien Zugriff über .items[x] auf das x-te Element.
Gruß Der Unwissende |
Re: Instanz einer Klasse identifizieren?!
Hi.
Ich habe jetzt alles soweit erfolgreich mit TObjectList gelöst. Eine Sache funktioniert bloß noch nicht und zwar eine Instanz wieder löschen. Dazu habe ich mir jetzt statt GetItemById eine Prozedur RemoveItemByID "gebastelt":
Delphi-Quellcode:
Wie kann ich die Instanz der Klasse und den "Eintrag" in die TObjectList erfolgreich löschen?
procedure TTestObjectList.RemoveItemByID(_ID: integer);
var Objekt: TTest; i: integer; begin Objekt:= nil; for i := 0 to Count-1 do if Items[i].ID = _ID then begin Objekt:= Items[i]; Objekt.Free; // HIER nach tritt eine Exception auf. Ist eigentlich auch klar. Da es das Objekt ja nicht mehr gibt // aber ist es auch schon aus der TObjectList verschwunden? Remove(Items[i]); exit; end; end; Thx! |
Re: Instanz einer Klasse identifizieren?!
Nun ja,
schau mal in die Hilfe von Delphi Zitat:
Delphi-Quellcode:
procedure TTestObjectList.RemoveItemByID(_ID: integer);
var Objekt: TTest; i: integer; begin Objekt := nil; // nicht nötig for i := 0 to Count - 1 do begin if Items[i].ID = _ID then begin Objekt := Items.Extract(Items[i]); Objekt.Free; break; end; end; end; |
Re: Instanz einer Klasse identifizieren?!
Thx! Klappt wunderbar mit Extract.
|
Re: Instanz einer Klasse identifizieren?!
Delete(i) funktioniert auch. Die gibt das Objekt gleich frei.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 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