Difference between revisions of "TCollection/de"

From Lazarus wiki
Jump to navigationJump to search
(Created page with "{{TCollection/de}} <br> <br> Collections gehören zur objektorientierten Programmierung.<br> Collections sind den Arrays ähnlich.<br> Der Unterschied zwischen Collection und ...")
 
m
Line 5: Line 5:
 
Collections sind den Arrays ähnlich.<br>
 
Collections sind den Arrays ähnlich.<br>
 
Der Unterschied zwischen Collection und Array besteht darin:<br>
 
Der Unterschied zwischen Collection und Array besteht darin:<br>
* Bei einem Array können immer nur Elemente vom selben Typ hinzugefügt werden. Bei einer Collection, können Elemente von unterschiedlichstem Typ hinzugefügt werden.
+
* 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.
* Ein Array ist eine einfach Liste von Elementen. Eine Collection ist eine Klasse, an die unterschiedliche Elemente vom Typ TCollectionItem angefügt werden können.
+
<br>
 +
Um das Beispiel übersichtlich zuhalten wurde nur ein Unterelement vom Typ TCollectionItem definiert.<br>
 
<br>
 
<br>
 
Erstellen der benötigten Klassen:
 
Erstellen der benötigten Klassen:

Revision as of 17:21, 1 February 2014

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;