AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein [Verständnisfrage]Array als Property?
Thema durchsuchen
Ansicht
Themen-Optionen

[Verständnisfrage]Array als Property?

Ein Thema von TForm1 · begonnen am 18. Feb 2014 · letzter Beitrag vom 19. Feb 2014
Antwort Antwort
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#1

[Verständnisfrage]Array als Property?

  Alt 18. Feb 2014, 20:09
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?
Der Fehler sitzt immer vor dem Computer...
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: [Verständnisfrage]Array als Property?

  Alt 18. Feb 2014, 20:13
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!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#3

AW: [Verständnisfrage]Array als Property?

  Alt 18. Feb 2014, 20:27
Ja, stimmt, da hätt' ich auch drauf kommen können...

Jetzt geht's wenigstens...Danke!
Der Fehler sitzt immer vor dem Computer...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: [Verständnisfrage]Array als Property?

  Alt 18. Feb 2014, 22:51
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

AW: [Verständnisfrage]Array als Property?

  Alt 19. Feb 2014, 00:12
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
FragenderHerbert

Registriert seit: 4. Dez 2013
47 Beiträge
 
#6

AW: [Verständnisfrage]Array als Property?

  Alt 19. Feb 2014, 10:02
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#7

AW: [Verständnisfrage]Array als Property?

  Alt 19. Feb 2014, 10:05
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#8

AW: [Verständnisfrage]Array als Property?

  Alt 19. Feb 2014, 17:19
...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.
Der Fehler sitzt immer vor dem Computer...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:05 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