TCollection/de
From Lazarus wiki
Jump to navigationJump to search
│
Deutsch (de) │
English (en) │
français (fr) │
polski (pl) │
Collections gehören zur objektorientierten Programmierung.
Collections sind den Arrays ähnlich.
Der Unterschied zwischen Collection und Array besteht darin:
- Bei einem Array können immer nur Elemente vom selben Typ hinzugefügt werden. Bei einer Collection, können Elemente vom Typ TCollectionItem mit unterschiedlichstem Aufbau hinzugefügt werden.
Um das Beispiel übersichtlich zuhalten wurde nur ein Unterelement vom Typ TCollectionItem definiert.
Erstellen der benötigten Klassen:
unit uCollections;
{$mode objfpc}{$H+}
interface
uses
Classes;
type
// TListItem
// TListitem ist eine Unterelement von TListe
TListItem = class(TCollectionItem)
private
strVorname: string;
strNachname: string;
bytAlter: byte;
public
constructor Create(colCollection: TCollection); override;
property Vorname: string read strVorname write strVorname;
property Nachname: string read strNachname write strNachname;
property Alter: byte read bytAlter write bytAlter;
//.. beliebig weitere properties
end;
// TListe
// An TListe werden die Elemente von TListItem angehängt
TListe = class(TCollection)
private
function GetItems(index: integer): TListItem;
procedure SetItems(index: integer; Value: TListItem);
public
constructor Create;
function Add: TCollectionItem;
property Items[index: integer]: TListItem read GetItems write SetItems;
end;
implementation
// TListe
function TListe.Add: TCollectionItem;
begin
// Es können belibig viele unterschiedliche Unterelemente,
// die als TCollectionItem deklariert wurden angefügt werden
Result := TCollectionItem(inherited Add);
end;
constructor TListe.Create;
begin
inherited Create(TListItem);
end;
function TListe.GetItems(index: integer): TListItem;
begin
Result := TListItem(inherited Items[Index]);
end;
procedure TListe.SetItems(index: integer; Value: TListItem);
begin
Items[Index].Assign(Value);
end;
// TListItem
constructor TListItem.Create(colCollection: TCollection);
begin
if assigned(colCollection) and (colCollection is TListe) then
inherited Create(colCollection);
end;
end.
Verwendung der Klassen:
procedure subVerarbeitung;
var
Liste: TListe;
begin
....
Liste := TListe.Create;
...
Liste.Add;
Liste.Items[Liste.Count-1].Vorname := 'Frida'; // ein String
Liste.Items[Liste.Count-1].Nachname := 'Fritz'; // ein String
Liste.Items[Liste.Count-1].Alter := 22; // ein Byte
Liste.Add;
Liste.Items[Liste.Count-1].Vorname := 'Karl'; // ein String
Liste.Items[Liste.Count-1].Nachname := 'Hamster'; // ein String
Liste.Items[Liste.Count-1].Alter := 43; // ein Byte
...
Liste.Free;
end;