AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Getter-Methode mit Parameter

Ein Thema von StepByStep · begonnen am 16. Mär 2017 · letzter Beitrag vom 20. Mär 2017
Antwort Antwort
StepByStep

Registriert seit: 12. Nov 2014
Ort: Schleswig-Holstein
61 Beiträge
 
Delphi 7 Professional
 
#1

Getter-Methode mit Parameter

  Alt 16. Mär 2017, 09:22
Hallo liebe Delphianer,

ich habe eine kleine Frage zu Properties und ihren Getter- und Settermethoden. Selbstverständlich habe ich diese schon mal genutzt und bin mit dem Gebrauch vertraut, doch jetzt stehe ich vor einem Problem, welches ich zuvor noch nicht hatte und ich aus meiner Suche im Internet nicht ganz schlau werde.

Die Ausgangsstellung ist folgende:

Ich habe eine Property die wie folgendermaßen aussieht...

property AsString: string read GetAsString write SetAsString; In der GetAsString-Methode baue ich mir ein XML zusammen, in der SetAsString-Methode parse ich das XML auseinander. diese zwei Methoden sehen wie folgt aus...

Delphi-Quellcode:
function GetAsString: string;
procedure SetAsString(const Value: string);
Nun iteriere ich in der GetAsString-Methode eine Schleife durch, das ist soweit in Ordnung, aber ich möchte gerne das XML so bauen können, dass ich anhand einer TList<Integer> nur für bestimmte Indexstellen eine XML-Zeile schreibe, also dachte ich, dass ich der GetAsString-Methode eine TList<Integer> übergeben könnte. Das hatte ich gegoogelt und bin auf verschiedene Quellen gestoßen, sodass ich folgendes nun hätte, wovon ich nicht ganz sicher bin, ob es korrekt ist:

Delphi-Quellcode:
property AsString[AIndexList: TList<Integer>]: string read GetAsString write SetAsString
function GetAsString(AIndexList: TList<Integer> = nil): string;
procedure SetAsString(const Value: string);
Das wirft aber einen Fehler, es seien inkompatible Typen. Wenn ich lesen kann, dann vermute ich, dass die SetAsString-Methode ebenfalls diesen Array benötigt, richtig? Aber gibt es eine Möglichkeit der AsString-Property die Liste zu übergeben, sodass nur die GetAsString-Methode diese nutzt, weil in der SetAsString-Methode ist sie überflüssig. In der GetAsString-Methode ist diese Liste übrigens nur optional und muss nicht zwangsläufig übergeben werden.

Der Aufruf der Property müsste demnach doch so lauten: .AsString[Liste] ?

Ich bedanke mich im Voraus schon einmal für die Antworten!

Gruß
Jan
Jan
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Getter-Methode mit Parameter

  Alt 16. Mär 2017, 09:27
Nein, das geht nicht.

In diesem Fall würde ich auf die Property verzichten und direkt mit Gettern und Settern arbeiten. Eine Liste als Index einer Propery finde ich sowieso grenzwertig.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
StepByStep

Registriert seit: 12. Nov 2014
Ort: Schleswig-Holstein
61 Beiträge
 
Delphi 7 Professional
 
#3

AW: Getter-Methode mit Parameter

  Alt 16. Mär 2017, 09:44
Verdammt...

Ich dachte mir schon, dass das nicht geht, aber fragen kostet nichts. Die Getter-Methode direkt zu nutzen und somit public zu machen finde ich aber auch eine blöde Lösung, zumal die Property in mehreren Units genutzt wird. Dann hilft das alles nichts und ich brauche einen anderen Ansatz, trotzdem danke für deine Antwort!

Gruß
Jan
Jan
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Getter-Methode mit Parameter

  Alt 16. Mär 2017, 09:50
Delphi-Quellcode:
function GetAsString(AIndexList: TList<Integer>): string;
procedure SetAsString(AIndexList: TList<Integer>; const Value: string);
property AsString[AIndexList: TList<Integer>]: string read GetAsString write SetAsString;
Ich weiß nicht was ihr habt, denn bei mir geht das natürllich.
$2B or not $2B
  Mit Zitat antworten Zitat
BrightAngel

Registriert seit: 13. Mär 2007
130 Beiträge
 
#5

AW: Getter-Methode mit Parameter

  Alt 16. Mär 2017, 10:02
In diesem Fall würde ich auf die Property verzichten und direkt mit Gettern und Settern arbeiten. Eine Liste als Index einer Propery finde ich sowieso grenzwertig.
Sehe ich genauso. Grund: Du Serialisierst und Deserialisierst Daten (bringst sie aus der Textuellen Repräsentation in die Objekt orientierte und umgekehrt). Theoretisch sollte bei einer Property die Invariante gelten, dass ein Getter immer exakt das selbe zurückgeliefert wie beim Setter davor gesetzt wurde. Warum ist das im Fall von XML sagen wir "schwierig"?
Die textuelle Repräsentation der Daten enthält noch weitere Information, die in der anderen Repräsentation fehlen. XML ist zum Beispiel zwecks Formatierung sehr tolerant was Whitespace angeht. Beim Deserialisieren von XML wird diese "wo ist Whitespace" Information nicht mit in die Objektrepräsentation übernommen. Auch könnten gegebenenfalls Kommentarstellen komplett wegfallen. Dadurch wird die Deserialisierung irreversibel. Du kannst zwar einen ähnlichen Datenstrom erzeugen (z.B. durch Pretty Printing), aber dieser wird nicht für alle Originale den Originalen vollständig entsprechen.

Brighty
Do you have the email of god??? --- I have to tell him that I'm happy to be born!

Geändert von BrightAngel (16. Mär 2017 um 10:05 Uhr)
  Mit Zitat antworten Zitat
StepByStep

Registriert seit: 12. Nov 2014
Ort: Schleswig-Holstein
61 Beiträge
 
Delphi 7 Professional
 
#6

AW: Getter-Methode mit Parameter

  Alt 20. Mär 2017, 09:43
Guten Morgen!

Glücklicher Weise habe ich eine andere Alternative gefunden, wie ich ohne meine zwei genannten Getter- und Settermethoden arbeiten konnte, zumindest für meinen Anwendungsfall.

@himitsu Ja, so hat das bei mir auch funktioniert, aber mein erster Wunsch war, dass die Settermethode nicht zwingend diesen Paramter enthält, leider geht das ja nicht.

@BrightAngel Das klingt plausibel, mir war im ersten Moment leider keine andere Alternative eingefallen... Danke aber nochmal für die ausführliche Erklärung. ^^

Gruß
Jan
Jan
  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 21:45 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