TCollection/de

From Free Pascal wiki

Deutsch (de) English (en) français (fr)

Zurück zur Seite Code Beispiele.

Collections gehören zur objektorientierten Programmierung.
Collections sind Klassen und den Arrays ähnlich.

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
    // überschreibt den von TCollection geerbten Construktor
    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;
    //.. beliebige viele Properties können folgen
  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;
    // Die Funktion hängt an das Objekt vom Typ TListe 
    // ein Objekt vom Typ TCollectionItem hinzu.
    function Add: TCollectionItem;
    property Items[index: integer]: TListItem read GetItems write SetItems;
  end;


implementation



// TListe

function TListe.Add: TCollectionItem;
begin
  // Es können beliebig viele Objekte vom Typ TCollectionItem,
  // als Elemente 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.


Das Objekt erstellen, füllen und auslesen:

procedure subVerarbeitung;
var
  Liste: TListe;
  strVorname: string;

begin
  
  ....
  
  // erstellt die Collection
  Liste := TListe.Create;
  
  ...
  
  // füllt die die Collection mit Daten
  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
  
  ...
  
  // liest ein Element der Collection aus
  strVorname:= Liste.Items[0].Vorname;
  
  ...
  
  // gibt den von der Collection belegten Speicher wieder frei
  Liste.Free;
  
end;



--Olaf 16:21, 1 February 2014 (CET)