TCollection/de

From Lazarus wiki
Revision as of 16:21, 1 February 2014 by Olaf (talk | contribs)
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;