Difference between revisions of "TCollection/de"

From Lazarus wiki
Jump to navigationJump to search
m
m (Fixed syntax highlighting; deleted category included in page template)
 
(8 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
{{TCollection/de}}
 
{{TCollection/de}}
<br>
+
 
<br>
+
 
Collections gehören zur objektorientierten Programmierung.<br>
+
Zurück zur Seite [[code examples/de|Code Beispiele]].
Collections sind 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.
+
Collections gehören zur objektorientierten Programmierung.
<br>
+
 
Um das Beispiel übersichtlich zuhalten wurde nur ein Unterelement vom Typ TCollectionItem definiert.<br>
+
Collections sind Klassen und den Arrays ähnlich.
<br>
+
 
 
Erstellen der benötigten Klassen:
 
Erstellen der benötigten Klassen:
<syntaxhighlight>
+
 
 +
<syntaxhighlight lang=pascal>
 
unit uCollections;
 
unit uCollections;
  
Line 30: Line 31:
 
     bytAlter: byte;
 
     bytAlter: byte;
 
   public
 
   public
 +
    // überschreibt den von TCollection geerbten Construktor
 
     constructor Create(colCollection: TCollection); override;
 
     constructor Create(colCollection: TCollection); override;
 
     property Vorname: string read strVorname write strVorname;
 
     property Vorname: string read strVorname write strVorname;
 
     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;
  
Line 46: Line 48:
 
   public
 
   public
 
     constructor Create;
 
     constructor Create;
 +
    // Die Funktion hängt an das Objekt vom Typ TListe
 +
    // ein Objekt vom Typ TCollectionItem hinzu.
 
     function Add: TCollectionItem;
 
     function Add: TCollectionItem;
 
     property Items[index: integer]: TListItem read GetItems write SetItems;
 
     property Items[index: integer]: TListItem read GetItems write SetItems;
Line 59: Line 63:
 
function TListe.Add: TCollectionItem;
 
function TListe.Add: TCollectionItem;
 
begin
 
begin
   // Es können belibig viele unterschiedliche Unterelemente,
+
   // Es können beliebig viele Objekte vom Typ TCollectionItem,
   // die als TCollectionItem deklariert wurden angefügt werden
+
   // als Elemente angefügt werden.
 
   Result := TCollectionItem(inherited Add);
 
   Result := TCollectionItem(inherited Add);
 
end;
 
end;
Line 92: Line 96:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
<br>
+
 
Verwendung der Klassen:
+
Das Objekt erstellen, füllen und auslesen:
<syntaxhighlight>
+
 
 +
<syntaxhighlight lang=pascal>
 
procedure subVerarbeitung;
 
procedure subVerarbeitung;
 
var
 
var
 
   Liste: TListe;
 
   Liste: TListe;
 +
  strVorname: string;
 +
 
begin
 
begin
 
    
 
    
 
   ....
 
   ....
 
    
 
    
 +
  // erstellt die Collection
 
   Liste := TListe.Create;
 
   Liste := TListe.Create;
 
    
 
    
 
   ...
 
   ...
 
    
 
    
 +
  // füllt die die Collection mit Daten
 
   Liste.Add;
 
   Liste.Add;
 
   Liste.Items[Liste.Count-1].Vorname := 'Frida';    // ein String
 
   Liste.Items[Liste.Count-1].Vorname := 'Frida';    // ein String
Line 118: Line 127:
 
   ...
 
   ...
 
    
 
    
 +
  // liest ein Element der Collection aus
 +
  strVorname:= Liste.Items[0].Vorname;
 +
 
 +
  ...
 +
 
 +
  // gibt den von der Collection belegten Speicher wieder frei
 
   Liste.Free;
 
   Liste.Free;
 
    
 
    
Line 123: Line 138:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
<br>
 
<br>
 
 
[[Category:Code Parts/de]]{{AutoCategory}}
 

Latest revision as of 06:01, 29 February 2020

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


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;