![]() |
TObjectlist - Container fuer?
Hallo,
ich habe eine Klasse, die von TObject abgelitten ist: type TMyClass = class ( TObject ) private ... Instanzen von dieser Klasse würde ich gerne in eine TObjectList verwalten. Leider erhalte ich aber: [Pascal Fehler] cMsgCtrl.pas(138): E2010 Inkompatible Typen: 'TMyClass' und 'TObject' wenn ich z.B. sowas machen will: Result := fObjList[Index]; Was kann ich machen? |
Re: TObjectlist - Container fuer?
Hi :hi:
Schaue dir mal diesen Thread an: ![]() Dort findest du die Lösung, und nebenbei wird erklärt was Type casting ist. :zwinker: |
Re: TObjectlist - Container fuer?
Oder kurz gesagt:
Du musst dem Compiler sagen, dass er annehmen soll, dass es sich um ein Objekt der von dir erstellten Klasse handelt (Typecasting). Dies kannst du auf 2 Wegen erreichen. 1.
Delphi-Quellcode:
2.
TMyClass(fObjList[Index])
Delphi-Quellcode:
(fObjList[Index] as TMyClass)
|
Re: TObjectlist - Container fuer?
Die TObjectlist kann alle Objekte Speichern, die von TObject abgeleitet sind. Eingefügt werden diese einfach mit "Add"
Delphi-Quellcode:
Dabei kannst du in eine Liste auch unterschiedliche objekte speichern.
myObjectlist.add(TBananenObject.create);
Delphi-Quellcode:
Wenn du darauf zugreifen willst, musst du ein Typecast durchführen
myObjectlist.add(TBananenObject.create);
myObjectlist.add(TApfelObject.create); myObjectlist.add(TBirnenObject.create);
Delphi-Quellcode:
Aber vorsichtig! So kannst du es nur machen, wenn du dir sicher bist, daß nur Bananenobjekte in der Liste sind. Ansonsten solltest du vorher püfen, was für ein objekt es ist.
myboolean:=TBananenObject(myObjectlist[a]).hatKerne;
Delphi-Quellcode:
if myObjectlist[a] is TBanabenObject then
myboolean:=TBanabenObject(myObjectlist[a]).hatKerne; Übrigens: Der Vorteil von TObjectList ist, daß es sich um die Freigabe der enthaltenen objekte kümmert, wenn du OwnsObjects auf true setzt. (Kann aber auch Nachteile haben) Gruss Gerd |
Re: TObjectlist - Container fuer?
Zitat:
Wenn das nicht gewünscht ist einfach
Delphi-Quellcode:
aufrufen
MyObjectList := TObjectList.Create(False);
|
Re: TObjectlist - Container fuer?
Wenn ihr das schon erklärt, dann weist doch bitte auch darauf hin, dass die Methode Extract() ein Objekt aus der Liste entfernt ohne das Objekt freizugeben - auch wenn OwnsObject auf true steht.
|
Re: TObjectlist - Container fuer?
Zitat:
Aber davon abgesehen, kannte ich diese Funktion bisher nicht. Oder habe sie wieder vergessen. GErd |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:32 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