Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#16

AW: Zugriff auf Objekt in TObjectList

  Alt 10. Dez 2019, 03:18
Zitat:
[Fehler] TDesignUnit.pas(5): can't find unit "Generics.Collections"
Fehlen Default-Namespaces in den Projektoptionen?

Die Unit heißt inzwischen System.Generics.Collections und wenn kein "System" als Default-Namespace definiert wurde, dann wird sie nicht gefunden, außer man schreibt den kompletten Namen.

TList = Liste mit beliebigen Zeigern (Pointer, Objekte oder sonstwas, was in einen Pointer/Integer gecastet werden kann)
TObjectList = Liste außschließlich mit Objektzeigeren (TObject und Nachfahren)
TComponentList = die kennt auch den TComponent-Typen und sein Notify-System (sie lässt sich informieren wenn ein Objekt gelöscht wird und entfernt dann auch das Item)
Die generischen TList<TTMSFNCToolBarButton> und TObjectList<TTMSFNCToolBarButton> wie oben, inkl. strikter/impliziter Typisierung.
Delphi-Quellcode:
x := ButtonList.Items[0]; // hier kommt der generische Typ raus (x ist er oder dessen Vorfahre)
ButtonList.Items[0].irgendwas // hier ebenso direkt der generische Typ
ButtonList.Items[0] := x; // hier geht er rein, nur er und dessen Nachfahren
TObjectList weiß was ein Objekt ist, kann daher auch Free/Destroy aufrufen, wenn ein Item gelöscht wird (wenn Owns=True, z.B. beim List.Delete ... nicht beim List.Extract )
Die Generischen haben den Cast eingebaut, also ButtonList.Items[0].Name statt dem weichen Cast (ButtonList.Items[0] as TTMSFNCToolBarButton).Name oder des Harten TTMSFNCToolBarButton(ButtonList.Items[0]).Name .

Und Default-Property (das default in Bezug auf Array-Property) kann man auch weglassen, weil bei Array-Zugriff implizit zum Default weitergeleitet wird.
ButtonList[0].Name bzw. (ButtonList[0] as TTMSFNCToolBarButton).Name oder TTMSFNCToolBarButton(ButtonList[0]).Name
$2B or not $2B

Geändert von himitsu (10. Dez 2019 um 03:29 Uhr)
  Mit Zitat antworten Zitat