![]() |
Propertys auf Klasse variabel ansprechen
Hallo zusammen,
ich habe eine Klasse mit Tabellennamen, diese möchte ich gerne variabel Abfragen. Beispiel:
Delphi-Quellcode:
Im Programm selbst, habe ich einen String der so heißt wie die Property "A1".
fTabelle1 : String;
fTabelle2 : String; Property A1 : String read fTabelle1 write fTabelle1; Property A2 : String read fTabelle2 write fTabelle2; Kann ich mit einem String die Property Abfragen und den Wert auslesen? Gruß Eppos |
AW: Propertys auf Klasse variabel ansprechen
Per RTTI geht das. Schau Dir mal die Unit System.Rtti dazu an.
[edit] Hier ein Minimalbeispiel ohne große Fehlerbehandlung:
Delphi-Quellcode:
[/edit]
uses System.Rtti;
function GetPropString(const Instance: TObject; const Propname: string): string; var ctx: TRttiContext; rt: TRttiType; Prop: TRttiProperty; Value: TValue; begin Result := ''; ctx := TRttiContext.Create; rt := ctx.GetType(Instance.ClassType); if Assigned(rt) then begin Prop := rt.GetProperty(Propname); if Assigned(Prop) then begin Value := Prop.GetValue(Instance); Result := Value.ToString; end; end; end; |
AW: Propertys auf Klasse variabel ansprechen
Perfekt, vielen Dank!
|
AW: Propertys auf Klasse variabel ansprechen
Perfekt? Sorry, aber ich halte so etwas für Murks. Man sollte so was nur im Notfall einsetzen
|
AW: Propertys auf Klasse variabel ansprechen
Zitat:
|
AW: Propertys auf Klasse variabel ansprechen
Nein, nicht einen sondern viele.
Im Kern geht es darum, dass man die Fehlersicherkeit eines typsicheren Compilers aufgibt. Wenn jemand das A2 mal umbennent, oder statt einem String einen FooString nimmt, dann bemerkt das vorher der Compiler. Mit Rtti knallt es im besten Fall zur Laufzeit, im schlimmsten Fall gibt es merkwürdige Effekte. Auch wird das KISS-Prinzip verletzt. Warum nimmste nicht ein array property? |
AW: Propertys auf Klasse variabel ansprechen
:gruebel:
Delphi-Quellcode:
Die Signaturen der Getter und Setter sind hier identisch, also kann man Beides oder nur je eine Variante verwenden.
fTabelle : Array[1..3] of String;
Property A1 : String index 1 read GetTabelle write SetTabelle; Property A2 : String index 2 read GetTabelle write SetTabelle; Property A3 : String index 3 read GetTabelle write SetTabelle; Property A[Index: Integer] : String read GetTabelle write SetTabelle; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:18 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-2025 by Thomas Breitkreuz