Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [Verständnisfrage]Array als Property? (https://www.delphipraxis.net/179174-%5Bverstaendnisfrage%5Darray-als-property.html)

TForm1 18. Feb 2014 19:09

[Verständnisfrage]Array als Property?
 
Hallo zusammen,
ich habe mich jetzt dazu entschlossen, in meinem derzeitigen Projekt so viel wie möglich mit OOP zu machen. Deshalb folgende Frage:
Ich möchte ein Array of Record, welches in meiner Klasse deklariert ist, als Property ausgeben. Es gab dazu auch schon einige Fragen hier im Forum, nur irgendwie werde ich nicht schlau daraus.
Delphi-Quellcode:
type
  MyRecord = record
  RecordName: String[100];
end;

MyClass = class
  private
    FRecordArray: array of MyRecord;
    procedure setArray(index: integer);
  public
    property RecordArray[index: integer]: MyRecord {?} read FRecordArray write setArray; //so klappt das aber nicht, Compiler meckert.
end;
Normalerweise hätte ich dieses Array, welches von vielen weiteren Klassen noch genutzt werden soll als globale Variable definiert und alle Units darauf zugreifen lassen, aber ich will ja OOP und globale Variablen sind ja sowieso nicht so das Gelbe vom Ei.
Also, wie würdet ihr dieses Problem lösen, oder ist mein Ansatz völlig falsch?

Aphton 18. Feb 2014 19:13

AW: [Verständnisfrage]Array als Property?
 
Dein Getter ist falsch, da dein Property über ein Index angesprochen wird, kann der Getter nicht eine einfache Variable (Field) sein. Bau dir ne GetArray Funktion die zum jeweiligen Index ein MyRecord liefert

Edit: Ich merk auch grad - dein Setter ist falsch, da fehlt ein Parameter mit dem neuen Wert!

TForm1 18. Feb 2014 19:27

AW: [Verständnisfrage]Array als Property?
 
Ja, stimmt, da hätt' ich auch drauf kommen können...:?

Jetzt geht's wenigstens...Danke!

Sir Rufo 18. Feb 2014 21:51

AW: [Verständnisfrage]Array als Property?
 
Zitat:

Zitat von TForm1 (Beitrag 1248424)
Ja, stimmt, da hätt' ich auch drauf kommen können...:?

Jetzt geht's wenigstens...Danke!

Wieso denn drauf kommen?

AFAIK hat doch Lazarus auch CodeCompletion. Da schreibt man
Delphi-Quellcode:
type
  TFoo = class
  public
    property Items[Index:integer] : TMyRecord;
  end;
und CodeCompletion (Shift-Strg-C innerhalb der Klassendeklaration) erstellt die korrekten Getter und Setter.

Gut, man kann sich das Leben schwer machen, muss man aber nicht ;)

himitsu 18. Feb 2014 23:12

AW: [Verständnisfrage]Array als Property?
 
Das hat delphi auch, nur hat mir das Mistding (Strg+Shift+C) heute zu einem Write-Only-Property mal wieder einen Getter eingebaut, aber das immer so, daß der Code dann knallt, weil die Syntax zerschossen wurde.

Delphi-Quellcode:
//property UraltesPublishedKompatibilitätsProperty write DerNeueSetter stored False;
property UraltesPublishedKompatibilitätsProperty write FDasNeueFeld stored False;

zu

property UraltesPublishedKompatibilitätsProperty write FDasNeueFeld stored False read FDasNeueFeld;


Aber ja, man glaubt garnicht, wo man sich alles viel Arbeit und Gehirnschmalz ersparen kann, weil es eine Vervollständigung/Vorlage dafür gibt.

PS: Das geht auch andersrum Strg+Shift+C in einer selbstgeschriebenen Klassenmethode und schups, schon steht der Methodenkopf in der Klassendeklaration.

FragenderHerbert 19. Feb 2014 09:02

AW: [Verständnisfrage]Array als Property?
 
Delphi-Quellcode:
procedure setArray(index: integer);
Hier fehlt Value, den Du zuweisen willst. Value ist ein String-Typ.

Delphi-Quellcode:
type
  TRecArrayString: String[100];
  TMyRecord = record
    RecordName: TRecArrayString;
  end;

procedure TMyCalss.setArray(index: integer; Value: TRecArrayString);
begin
  FRecordArray[Index].RecordName := value;
end;
Das sollte auch funktionieren.

DeddyH 19. Feb 2014 09:05

AW: [Verständnisfrage]Array als Property?
 
Nee, er will ja den Record zuweisen und keine einzelnen Felder daraus. Wie schon angesprochen einfach die Klassenvervollständigung nutzen, das sollte (in den meisten Fällen) dann automatisch passen.

TForm1 19. Feb 2014 16:19

AW: [Verständnisfrage]Array als Property?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1248434)
...und CodeCompletion (Shift-Strg-C innerhalb der Klassendeklaration) erstellt die korrekten Getter und Setter.

Gut, man kann sich das Leben schwer machen, muss man aber nicht ;)

Danke, den Trick kannte ich noch nicht, dann kann ich das ja das nächste mal anwenden, jetzt hab ich mir jedenfalls die Mühe gemacht alles von Hand hinzuschreiben.:wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 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