![]() |
Alle Eigenschaften einer Klasse herausfinden
Hallo,
ich möchte eine Prozedur schreiben, die einen untypisierten Parameter erwartet und dann irgendwie auf Eigenschaften dieser Variable zugreift. Also z.B. so eine:
Delphi-Quellcode:
Die Variable "Variable" gehört zu einer Klasse, die ich selbst erstellt habe.
procedure verarbeite(const Variable; Dateiname:string);
var i : integer; begin for i:=0 to AnzahlEigenschaftenDerVariable do Memo1.Text := Memo1.Text + TString(Variable.Eigenschaften[i]); end; Geht sowas? Ich konnte nichts entsprechendes finden. Viele Grüße Stefan |
Re: Alle Eigenschaften einer Klasse herausfinden
Was erwartest du denn an Eigenschaften für eine untypisierte Variable (z,B, Integer)? Wenn du die Variable auf von TPersistent abgeleitet einschränken kannst, gibt es vielleicht eine Möglichkeit über RTTI.
|
Re: Alle Eigenschaften einer Klasse herausfinden
Als variable möchte ich eigene Klassen übergeben.
also z.B.:
Delphi-Quellcode:
Die Prozedur 'verarbeite' soll aber verschiedene Variablentypen (also von unterschiedlichen selbst erstellten Klasse) verarbeiten können.type TMyClass = class . . private . . public property Eigensch_1:string read .. write ...; property Eigensch_2:integer read... write...; end; // im Programm rufe ich dann auf: Variable := TMyClass.create; verarbeite(Variable,'c:\temp\test.dat'); Variable.free; |
Re: Alle Eigenschaften einer Klasse herausfinden
Benutze
:arrow: eine gemeinsame Basisklase (in dieser kannst du die elemente definieren, auf die zugegriffen werden soll) oder :arrow: Interfaces (same, aber schränkt nicht die vererbung ein) oder :arrow: RTTI (flexibel, ermöglicht das zugreifen auf published properties jeder Klasse) Von oben nach unten flexibler aber tendenziell aufwändiger. |
Re: Alle Eigenschaften einer Klasse herausfinden
Hier mal ein Beispiel für RTTI:
Delphi-Quellcode:
type
{$TYPEINFO ON} // Ohne das geht's nicht! TMyClass = class private FEigensch_1: string; FEigensch_2: integer; public property Eigensch_2: integer read FEigensch_2 write FEigensch_2; // public properties gehen so auch nicht! published property Eigensch_1: string read FEigensch_1 write FEigensch_1; // dafür gehen aber published properties end; procedure TForm1.verarbeite(Variable: TObject); var N: Integer; i : integer; PropList: PPropList; begin N := GetPropList(Variable, PropList); for i := 0 to N - 1 do begin Memo1.Lines.Add(PropList[I].Name); end; end; procedure TForm1.Button1Click(Sender: TObject); var Variable: TMyClass; begin Variable := TMyClass.create; try verarbeite(Variable); finally Variable.Free; end; end; |
Re: Alle Eigenschaften einer Klasse herausfinden
Super, So funktioniert es.
Vielen Dank! Gruß Stefan. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 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