AW: Auf Objekt in der TObjectList zugreifen
Nein, wie denn? Ich dachte (bin mir nicht sicher), die alte TObjectList arbeitet mit
Delphi-Quellcode:
oder
Pointer
Delphi-Quellcode:
. Du kannst in einer Ableitung nicht einfach den Typ verschärfen, also gegen
TObject
Delphi-Quellcode:
ersetzen.
TMeineKlasse
|
AW: Auf Objekt in der TObjectList zugreifen
Ob das besser oder sinnvoller ist, sei dahingestellt, ich zumindest habe das so gemacht.
|
AW: Auf Objekt in der TObjectList zugreifen
Die TObjectList ist nicht sonderlich kompliziert, ich denke die baut auf TList auf. Wer also nichts erben will, bzw. die TObjectList nicht, kann den Code von TObjectList kopieren und an eigene Bedürfnisse modifizieren.
|
AW: Auf Objekt in der TObjectList zugreifen
Wozu? Meistens reicht es schon die property Items zu überschreiben:
Delphi-Quellcode:
TSomeItems = class(TObjectList)
private function GetSomeItem(Index: integer): TSomeItem; public property Items[Index: integer]: TSomeItem read GetSomeItem; default; end; { TSomeItems } function TSomeItems.GetSomeItem(Index: integer): TSomeItem; begin Result := TSomeItem(inherited Items[Index]); end; { TSomeApp } procedure TSomeApp.DoSomething; begin Index := FSomeItems.Add(TSomeItem.Create); FSomeItems[Index].DT := Now; end; |
AW: Auf Objekt in der TObjectList zugreifen
http://www.delphi-treff.de/tutorials/vcl/tobjectlist/3/, allerdings trifft der Text nicht ganz zu, denn die Methoden können gar nicht überschrieben werden, dazu müssten sie virtuell oder dynamisch sein. Tatsächlich werden sie im gezeigten Code also verdeckt. In den meisten Fällen ist das nicht so schlimm, aber wenn Polymorphie (z.B. ein TObjectList-Parameter) ins Spiel kommt, spielt das schon eine Rolle.
|
AW: Auf Objekt in der TObjectList zugreifen
Zitat:
Nur überdecken/verdecken, da es ja nicht überschreibbar (override) ist. |
AW: Auf Objekt in der TObjectList zugreifen
Aber wenn ich nur Items anfasse, kann ich ja immer noch z.B. ein TEdit zur Liste hinzufügen. Das wird dann beim Items-Getter ganz böse knallen.
|
AW: Auf Objekt in der TObjectList zugreifen
Jupp, aber wenn man böse castet, dann bekommt man auch in die generischen Liste ein TEdit rein. (das Gegenteil von hier -> nicht casten)
Aber man könnte ja auch noch die Add- und InsertMethoden überdecken. :wink: Und wenn man eine Variable auf TObjectList hat, dann ist dort ebenfalls wieder das alte Item. Es ist halt nur in dem Typen überdeckt, aber im Vorfahren natürlich nicht. (bei den Generics gibt es das Problem nicht, da der Typ nicht mit dem Vorfahren kompatibel ist :stupid:) |
AW: Auf Objekt in der TObjectList zugreifen
Schau Dir doch einfach #15 nochmal an und folge dem Link. Das ist doch fast alles schon gesagt worden :stupid:
|
AW: Auf Objekt in der TObjectList zugreifen
Es fehlt nur noch Eines.
Wenn man Notify "überschreibt" und dort eine Typprüfung einbaut, dann könnte man ganz leicht dafür sorgen, daß nur erlaubte Typen in die Liste aufgenommen werden. :angel2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz