Ehrlich gesagt bin ich mir nicht sicher, ob ich das erklären kann, aber ich versuche es.
Die Collection ist im Prinzip so ähnlich wie eine ObjectList, d.h. du kannst Objekte darin speichern. Allerdings müssen diese Objekte von TCollectionItem abgeleitet werden und pro Collection geht nur ein Objekttyp.
Also in dieser Reihenfolge:
1. Ein Objekt mit den gewünschten Eigenschaften/Methoden von TCollectionItem ableiten.
2. Eine Collection von TCollection ableiten und der Bequemlichkeit halber bereits hier die entsprechenden Typcasts auf den Itemtypen vornehmen. Zusätzlich können hier natürlich auch noch Methoden und Eigenschaften, die die gesamte Collection betreffen programmiert werden (z.B. um bei den Viechern zu bleiben, eine "Mutiere"-Methode, die durch alle Viecher in der Collection iteriert und deren Mutieren Methode aufruft).
3. Die Collection mit Daten füllen (Add, Insert) oder die Daten in der Collection bearbeiten (Delete).
Den Punkt 2 könntest du auch weglassen, dann musst du die Typcasts halt beim Aufruf der ursprünglichen Methoden machen. Ich nehme mal die Viecher als Beispiel her und gehe davon aus, dass Collection einfach vom Typ TCollection ist.
Delphi-Quellcode:
var tempViech: TViech;
tempViech := TViech(Collection.Add);
//So sieht übrigens das Create von TCollection intern aus
constructor TCollection.Create(ItemClass: TCollectionItemClass);
begin
FItemClass := ItemClass;
FItems := TList.Create;
NotifyDesigner(Self, Self, opInsert);
end;
//und so die Add Methode
function TCollection.Add: TCollectionItem;
begin
Result := FItemClass.Create(Self);
Added(Result);
end;
Ich schreib auch gleich das Beispiel aus Punkt 2 hin, bevor Fragen kommen. "Mutieren" aller Viecher:
Delphi-Quellcode:
procedure TViecher.Mutiere;
var i: Integer;
begin
for i := 0 to Count - 1 do begin
Viech[i].Mutiere;
end;
end;
//Im Hauptprogramm ruft man jetzt nur noch eine Methode auf und Mutiert alle Viecher
BlaueViecher.Mutiere;