TObjectList
Sonstiges
Die Eigenschaft last
Häuft möchte man, wenn ein Object in die Liste eingefügt wurde, auch noch auf das hinzugefügte Objekte zugreifen. Das lässt sich mit der Eigenschaft last der ObjectList einfach realisieren.
ObjectList.add(TKlasse.create); TKlasse(ObjectList.last).methode; TKlasse(ObjectList.last).feld := 1;
Die Eigenschaft count
Count liefer die Anzahl der in der Liste gespeicherten Objekte. Das ist nützlich, wenn man mit einer Schleife alle Objekte durchlaufen möchte. Allerdings muss man beachten, dass count nicht dem höchsten index entspricht, weil das erste Objekt den Index 0 hat.
for i:=0 to ObjectList.count-1 do begin TKlasse(ObjectList.items[i]).blabla; end;
TObjectList an Klasse anpassen
Der Typecast, der beim Zugriff auf ein Objekt aus der Liste notwendig ist, macht den Code unübersichtlich und fehleranfällig. Er lässt sich vermeiden, indem man die TObjectList an eine Klasse anpasst. Es wird dann also kein TObject zurückgeliefert sondern z.B TKlasse.
Dafür wird eine neue Klasse erstellt, die von TObjectList erbt, und dann werden die entsprechenden Eigenschaften überschrieben.
TCustomObjectList = class(TObjectList) protected function getItem(Index: Integer): TKlasse; virtual; procedure setItem(Index: Integer; Objekt: TKlasse); virtual; public function Add(Objekt: TKlasse): Integer; virtual; function Remove(Objekt: TKlasse): Integer; virtual; function IndexOf(Objekt: TKlasse): Integer; virtual; procedure Insert(Index: Integer; Objekt: TKlasse); virtual; function First: TKlasse; virtual; function Last: TKlasse; virtual; property Items[Index: Integer]: TKlasse read getItem write setItem; default; end; function TCustomObjectList.getItem(Index: Integer): TKlasse; begin Result := TKlasse(inherited Items[Index]); end; procedure TCustomObjectList.setItem(Index: Integer; Objekt: TKlasse); begin inherited Items[Index] := Objekt; end; function TCustomObjectList.Add(Objekt: TKlasse): Integer; begin Result := inherited Add(Objekt); end; function TCustomObjectList.First: TKlasse; begin Result := TKlasse(inherited First()); end; function TCustomObjectList.IndexOf(Objekt: TKlasse): Integer; begin Result := inherited IndexOf(Objekt); end; procedure TCustomObjectList.Insert(Index: Integer; Objekt: TKlasse); begin inherited Insert(Index, Objekt); end; function TCustomObjectList.Last: TKlasse; begin Result := TKlasse(inherited Last()); end; function TCustomObjectList.Remove(Objekt: TKlasse): Integer; begin Result := inherited Remove(Objekt); end;