![]() |
RTTI Enum von Propertys?
Hallo Zusammen!
Nochmal zum Thema Rtti. Gibt es eine Möglichkeit für eine Funktion
Delphi-Quellcode:
:stupid:
function GetAllPropertyNames(C : TClass):TList<String>;
var i : integer; begin Result := TList<String>.Create; for i:=0 to C.Propertys.count-1 do Result.Add(C.Propertys[i].ProperyName); end; Grüsse Mavarik |
AW: RTTI Enum von Propertys?
Hiermit vielleicht?
![]() [edit] Hihi, Schnapsrunde fällig (2222 Beiträge) :cheers: [/edit] |
AW: RTTI Enum von Propertys?
Zitat:
Ups so einfach... GetProperties... Zitat:
Mavarik |
AW: RTTI Enum von Propertys?
Die englische Version ist verständlicher:
Zitat:
Ich meine, was hätte sonst passieren können. Vielleicht hätte die Methode ja auch eine Exception werfen können wenn man was reinsteckt wo im Vorhinein klar ist dass es keine Properties haben kann. |
AW: RTTI Enum von Propertys?
Da fühlen sich die armen Class/Record-Helpher aber voll verarscht.
Ich hab vorhin einen Text mit der Nummer 17777 im Programm angelegt und keiner wollte feiern. :cry: (hatte aber auch erst bei 17000 angefangen) |
AW: RTTI Enum von Propertys?
Guter Einwand.
Delphi-Quellcode:
ergibt
program Project16;
{$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils, System.Rtti; type TObjectHelper = class helper for TObject protected function getValue(): Integer; public property Value: Integer read getValue; end; { TObjectHelper } function TObjectHelper.getValue(): Integer; begin Result := 42; end; procedure justRttiThings(); var context: TRttiContext; rttiType: TRttiType; properties: TArray<TRttiProperty>; propertyIterator: TRttiProperty; begin context := TRttiContext.Create(); properties := context.GetType( TypeInfo(TObjectHelper)).GetProperties(); for propertyIterator in properties do WriteLn(propertyIterator.Name); end; begin try justRttiThings(); except on E: Exception do Writeln(E.ClassName, ': ', E.Message); end; readln; end.
Code:
Welche Magie steckt hier dahinter?
Value
RefCount |
AW: RTTI Enum von Propertys?
Wo soll denn da Magie sein? Das ist doch so wie erwartet, oder etwa nicht?
Auf jeden Fall sind alle Informationen vorhanden um das auflösen zu können.
Delphi-Quellcode:
ist verbunden mit
TObjectHelper
Delphi-Quellcode:
und darum werden alle Eigenschaften von
TObject
Delphi-Quellcode:
und
TObject
Delphi-Quellcode:
aufgelistet.
TObjectHelper
Also ich hätte das jetzt auch so erwartet ... |
AW: RTTI Enum von Propertys?
|
AW: RTTI Enum von Propertys?
Das ist definitiv seltsam und da scheint auch irgendwas nicht zu passen
Delphi-Quellcode:
Wenn man nur
TObject = class
public ... {$IFDEF AUTOREFCOUNT} protected {$ENDIF} destructor Destroy; virtual; {$IFDEF CPP_ABI_SUPPORT} procedure CPP_ABI_1; virtual; procedure CPP_ABI_2; virtual; procedure CPP_ABI_3; virtual; {$ENDIF !CPP_ABI_SUPPORT} protected function GetDisposed: Boolean; inline; procedure CheckDisposed; {$IFNDEF AUTOREFCOUNT} inline; {$ENDIF} {$IFDEF AUTOREFCOUNT} private const objDestroyingFlag = Integer($80000000); objDisposedFlag = Integer($40000000); protected [Volatile] FRefCount: Integer; class procedure __MarkDestroying(const Obj); static; inline; class function __SetDisposed(const Obj): Boolean; static; inline; public property RefCount: Integer read FRefCount; {$ENDIF} property Disposed: Boolean read GetDisposed; end;
Delphi-Quellcode:
abfragt, dann wird keine Eigenschaft gefunden, dabei hätte ich noch
TObject
Delphi-Quellcode:
erwartet.
Disposed
Ja und das
Delphi-Quellcode:
kommt irgendwie da durch den
RefCount
Delphi-Quellcode:
rein (und soll angeblich
helper
Delphi-Quellcode:
sein).
public
|
AW: RTTI Enum von Propertys?
Führ doch mal das hier aus, dann siehste, wo das her kommt ;)
Delphi-Quellcode:
rttiType := context.GetType(TypeInfo(TObjectHelper));
while Assigned(rttiType) do begin Writeln(rttiType.ToString); rttiType := rttiType.BaseType; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:21 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