Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Alle Eigenschaften einer Klasse herausfinden (https://www.delphipraxis.net/122470-alle-eigenschaften-einer-klasse-herausfinden.html)

changlee 16. Okt 2008 19:10


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:
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;
Die Variable "Variable" gehört zu einer Klasse, die ich selbst erstellt habe.

Geht sowas?

Ich konnte nichts entsprechendes finden.

Viele Grüße
Stefan

Uwe Raabe 16. Okt 2008 19:36

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.

changlee 16. Okt 2008 19:46

Re: Alle Eigenschaften einer Klasse herausfinden
 
Als variable möchte ich eigene Klassen übergeben.

also z.B.:

Delphi-Quellcode:

  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;
Die Prozedur 'verarbeite' soll aber verschiedene Variablentypen (also von unterschiedlichen selbst erstellten Klasse) verarbeiten können.

jfheins 16. Okt 2008 20:47

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.

Uwe Raabe 16. Okt 2008 20:54

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;

changlee 17. Okt 2008 17:49

Re: Alle Eigenschaften einer Klasse herausfinden
 
Super, So funktioniert es.

Vielen Dank!

Gruß
Stefan.


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