![]() |
Über Eigenschaften einer Kindklasse iterieren
Hallo!
Ist es möglich, über Eigenschaften einer abgeleiteten Klasse zu iterieren, dabei festzustellen ob eine Eigenschaft eine Variable eines bestimmten Typs ist und diese Variable dann einer lokalen Prozedurvariable zuzuweisen? Hier ein Phantasie-Beispiel:
Code:
Das Ganze ist wirklich nur ein Phantasiegebilde. Ziel ist, in der Elternklasse oder irgendeiner anderen Prozedur über die Eigenschaften der Kindklasse zu iterieren. In meinem Fall gibt es einen ganzen Berg von Nachfahren, die alle unterschiedlich benannte Eigenschaften des selben Record-Typs besitzen. Die müsste ich finden (ohne die genaue Deklaration der Nachfahrklasse zu kennen) und damit arbeiten können.
TRecordTyp = record
Daten: String; Nummer: Integer; end; TElternKlasse = class protected procedure Iterieren; end; TKindKlasse = class(TElternKlasse) private FRecord1: TRecordTyp; FRecord2: TRecordTyp; public property Record1: TRecordTyp read FRecord1 write FRecord1; property Record1: TRecordTyp read FRecord1 write FRecord1; end; procedure TElternKlasse.Iterieren; var I: Integer; TR: TRecordTyp; begin for I:= 0 to Self.PropertyCount - 1 do begin if Self.Properties[I] is TRecordTyp then begin TR:= TRecordTyp(Self.Properties[I]); with TR do begin // .. end; end; end; end; Ist sowas überhaupt möglich? |
AW: Über Eigenschaften einer Kindklasse iterieren
Das Stichwort lautet RTTI, bei Delphi 5 ist es aber soweit ich weiß Essig
|
AW: Über Eigenschaften einer Kindklasse iterieren
Ok danke, da hab ich ja zumindest einen Einstieg.
|
AW: Über Eigenschaften einer Kindklasse iterieren
Such mal im Forum nach "PropertyByName" ... Die Funktion gibt es zwar originär so nicht, führt aber in die richtige Richtung (Unit TypInfo). (Ab welcher Delphiversion weiß ich aber nicht.)
Die Eigenschaften müssen aber published sein. Für public-Eigenschaften ging das leider nicht - hätte ich Bedarf gehabt ... :( Ab D2010 gibt es deutlich bessere Möglichkeiten. Dazu gab es ein Video von Daniel. |
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