Difference between revisions of "TCollection/de"

From Free Pascal wiki
Jump to navigationJump to search
m
m
Line 3: Line 3:
 
<br>
 
<br>
 
Collections gehören zur objektorientierten Programmierung.<br>
 
Collections gehören zur objektorientierten Programmierung.<br>
Collections sind den Arrays ähnlich.<br>
+
Collections sind Klassen und den Arrays ähnlich.<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 vom Typ TCollectionItem mit unterschiedlichstem Aufbau hinzugefügt werden.
 
<br>
 
Um das Beispiel übersichtlich zuhalten wurde nur ein Unterelement vom Typ TCollectionItem definiert.<br>
 
<br>
 
 
Erstellen der benötigten Klassen:
 
Erstellen der benötigten Klassen:
 
<syntaxhighlight>
 
<syntaxhighlight>
Line 34: Line 30:
 
     property Nachname: string read strNachname write strNachname;
 
     property Nachname: string read strNachname write strNachname;
 
     property Alter: byte read bytAlter write bytAlter;
 
     property Alter: byte read bytAlter write bytAlter;
     //.. beliebig weitere properties
+
     //.. beliebige viele Properties können folgen
 
   end;
 
   end;
  

Revision as of 09:03, 2 February 2014

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


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
    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;
    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;



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