![]() |
Delphi-Version: 2010
RTTI: FieldType eines Klassenfeldes ist nil !?
]Hallo zusammen,
ich versuche hier gerade mit RTTI zu arbeiten, habe aber ein merkwürdiges Problem ... Folgende Deklarationen:
Code:
Rein theoretisch sind m.E. beide Klassen identisch (?).
type R = record f: string end;
type PR = ^R; type C1 = class X: PR; end; type C2 = class X: ^R; end; procedure Test(C: TClass); var Ctx: TRttiContext; T: TRttiType; F: TRttiField; begin Ctx := TRttiContext.Create; try T := Ctx.GetType(C); for F in T.GetFields do begin if Assigned(F.FieldType) then Writeln(F.FieldType.ClassName) else Writeln('Schock!'). end; finally Ctx.Free; end; end; Frage ich nun mit RTTI die Felder der Klasse ab, bekomme ich bei C1 die erwarteten Werte, d.h. das Feld X hat den FieldType "TRttiPointerType", so soll es sein. Mache ich das Ganze mit C2 existiert zwar das Feld X, aber der gelieferte FieldType ist nil und nicht wie erwartet "TRttiPointerType" :shock: Denke ich hier falsch, oder kann mir das irgendjemand erklären? Gruß Stephan |
AW: RTTI: FieldType eines Klassenfeldes ist nil !?
RTTI kann nur mit Typen umgehen, die einen Namen haben, also per type declaration definiert worden sind. "On the fly" erzeugte Typen wie dein ^R gehören nicht dazu.
|
AW: RTTI: FieldType eines Klassenfeldes ist nil !?
Zitat:
Das scheint aber nur begrenz so zu sein ... Für die Klasse
Code:
geht das sehr wohl, allerdings ist der Typname von X dann doch sehr kryptisch - :C4.:1
C4 = class
X: record F: string end; end; Ziemlich schräg. |
AW: RTTI: FieldType eines Klassenfeldes ist nil !?
Zitat:
|
AW: RTTI: FieldType eines Klassenfeldes ist nil !?
Zitat:
Selbst wenn ich
Code:
verwende, wird der Typname :C4.:1 ausgegeben.
C4 = class
X: record end; end; Ist für mich absolut unlogisch das Ganze und sorgt bei der Verwendung für einige Klimmzüge :-( Soweit ich das bisher eruieren konnte gibts das Problem nur für die Variante mit einer (impliziten) Pointer Deklaration. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:24 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