Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi array of record in class (https://www.delphipraxis.net/132964-array-record-class.html)

LiS 22. Apr 2009 23:27


array of record in class
 
Hallo!

Ich bin gerade dabei, mein Programm etwas objektorientierter zu gestalten, habe aber noch keine Erfahrungen mit Klassen etc.
In meinem Programm nutze ich einen array of record, in welchem verschiedene Daten gespeichert sind. Dieser array soll auf verschiedene Arten ausgewertet werden und dazu möchte ich eine Klasse nutzen. Ich habe es leider nicht herausfinden können, wie die Klasse aufgebaut sein muss, damit die Definition eines records vorhanden ist, dann ein dynamisches array of record, in welchem die Daten stehen und dann verschiedene Funktionen, die die Auswertung für die Daten liefern.
Vielleicht könnt ihr mir ja auch andere Lösungen für das Problem vorschlagen, denn ich bin wie gesagt mit der OOP noch gänzlich unerfahren.

Vielen Dank für Eure Hilfe!

blackdrake 23. Apr 2009 01:08

Re: array of record in class
 
Zeig uns doch ein wenig Quellcode, damit wir dir konkrete Ratschläge geben können.

Records sind übrigens konstrukte, die man idR durch Klassen ersetzt, wenn man 100% OOP programmiert.

Ersetze also erstmal das Record durch eine Klasse. Die Elemente sind dann Felder mit der Sichtbarkeit public. Beachte! Eine Klasse muss in Zukunft erstellt (instanziiert) werden und nicht einfach so wie ein Record verwendet werden.

Vorher:

Delphi-Quellcode:
type
  TKoordinate = record
    x: Integer;
    y: Integer;
  end;

procedure MeineFunktion;
var
  k: TKoordinate;
begin
  k.x := 5;
  k.y := 3;
end;
Nachher:

Delphi-Quellcode:
type
  TKoordinate = class(TObject)
  public
    x: Integer;
    y: Integer;
  end;

procedure MeineFunktion;
var
  k: TKoordinate;
begin
  k := TKoordinate.Create();
  try
    k.x := 5;
    k.y := 3;
  finally
    k.free;
  end;
end;
Bei deiner Verwaltungsklasse sagst du dann einfach sowas:

Delphi-Quellcode:
type
  TKoordinatenArray = array of TKoordinate; // dynamischer Array

  TVerwaltungsklasse = class(TObject)
  private
    meinArray: TKoordinatenArray;
  public
    procedure machWasMitMeinemArray;
  end;

procedure TVerwaltungsklasse.machWasMitMeinemArray;
begin
  //meinArray...
end;
Ich denke, die Deklaration von TKoordinatenArray ist das, was du gesucht hast. Eine solche Typdeklaration ist wichtig, wenn du z.B. einen Array of Irgendwas als Funktionswert zurückgeben willst.

Falsch:

Delphi-Quellcode:
function MyFunction: array of TObject;
Richtig:

Delphi-Quellcode:
type
  TObjectArray = array of TObject;

function MyFunction: TObjectArray;
Gruß
blackdrake

mkinzler 23. Apr 2009 05:34

Re: array of record in class
 
Man könnte dann den Array noch durch eine Liste ersetzen

LiS 23. Apr 2009 09:27

Re: array of record in class
 
Zitat:

Zitat von blackdrake
Ich denke, die Deklaration von TKoordinatenArray ist das, was du gesucht hast.

Danke, genau das habe ich gesucht. Das werde ich jetzt mal versuchen, einzubauen; ääh. :lol:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz