![]() |
Getter-Methode mit Parameter
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...
Delphi-Quellcode:
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...
property AsString: string read GetAsString write SetAsString;
Delphi-Quellcode:
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:
function GetAsString: string;
procedure SetAsString(const Value: string);
Delphi-Quellcode:
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.
property AsString[AIndexList: TList<Integer>]: string read GetAsString write SetAsString
function GetAsString(AIndexList: TList<Integer> = nil): string; procedure SetAsString(const Value: string); Der Aufruf der Property müsste demnach doch so lauten:
Delphi-Quellcode:
?
.AsString[Liste]
Ich bedanke mich im Voraus schon einmal für die Antworten! Gruß Jan |
AW: Getter-Methode mit Parameter
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. |
AW: Getter-Methode mit Parameter
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 |
AW: Getter-Methode mit Parameter
Delphi-Quellcode:
Ich weiß nicht was ihr habt, denn bei mir geht das natürllich. :stupid:
function GetAsString(AIndexList: TList<Integer>): string;
procedure SetAsString(AIndexList: TList<Integer>; const Value: string); property AsString[AIndexList: TList<Integer>]: string read GetAsString write SetAsString; |
AW: Getter-Methode mit Parameter
Zitat:
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. :thumb: Brighty |
AW: Getter-Methode mit Parameter
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz