Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Propertys auf Klasse variabel ansprechen (https://www.delphipraxis.net/189768-propertys-auf-klasse-variabel-ansprechen.html)

Eppos 19. Jul 2016 10:19

Propertys auf Klasse variabel ansprechen
 
Hallo zusammen,

ich habe eine Klasse mit Tabellennamen, diese möchte ich gerne variabel Abfragen.

Beispiel:
Delphi-Quellcode:
fTabelle1 : String;
fTabelle2 : String;

Property A1 : String read fTabelle1 write fTabelle1;
Property A2 : String read fTabelle2 write fTabelle2;
Im Programm selbst, habe ich einen String der so heißt wie die Property "A1".
Kann ich mit einem String die Property Abfragen und den Wert auslesen?

Gruß
Eppos

DeddyH 19. Jul 2016 10:55

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:
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;
[/edit]

Eppos 19. Jul 2016 12:14

AW: Propertys auf Klasse variabel ansprechen
 
Perfekt, vielen Dank!

freimatz 19. Jul 2016 12:19

AW: Propertys auf Klasse variabel ansprechen
 
Perfekt? Sorry, aber ich halte so etwas für Murks. Man sollte so was nur im Notfall einsetzen

Lemmy 19. Jul 2016 12:26

AW: Propertys auf Klasse variabel ansprechen
 
Zitat:

Zitat von freimatz (Beitrag 1342968)
Perfekt? Sorry, aber ich halte so etwas für Murks. Man sollte so was nur im Notfall einsetzen

Gibt es dafür auch einen Grund?

freimatz 19. Jul 2016 13:02

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?

himitsu 19. Jul 2016 14:42

AW: Propertys auf Klasse variabel ansprechen
 
:gruebel:
Delphi-Quellcode:
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;
Die Signaturen der Getter und Setter sind hier identisch, also kann man Beides oder nur je eine Variante verwenden.


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