Einzelnen Beitrag anzeigen

guidok

Registriert seit: 28. Jun 2007
417 Beiträge
 
#42

Re: denkfehler; array-> dynarray

  Alt 8. Jan 2009, 15:51
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;
  Mit Zitat antworten Zitat