|
@@ -0,0 +1,48 @@
|
|
|
+program rtti;
|
|
|
+
|
|
|
+{$ifdef fpc}
|
|
|
+{$mode objfpc}{$H+}
|
|
|
+{$apptype console}
|
|
|
+{$endif}
|
|
|
+
|
|
|
+uses
|
|
|
+ {$IFDEF UNIX}{$IFDEF UseCThreads}
|
|
|
+ cthreads,
|
|
|
+ {$ENDIF}{$ENDIF}
|
|
|
+ Classes, typinfo
|
|
|
+ { you can add units after this };
|
|
|
+
|
|
|
+type
|
|
|
+ { TSomeBaseClass }
|
|
|
+
|
|
|
+ TSomeBaseClass = class(TPersistent)
|
|
|
+ private
|
|
|
+ FSomeProperty: Integer;
|
|
|
+ public
|
|
|
+ property SomeProperty: Integer read FSomeProperty write FSomeProperty default 10;
|
|
|
+ end;
|
|
|
+
|
|
|
+ { TSomeDerivedClass }
|
|
|
+
|
|
|
+ TSomeDerivedClass = class(TSomeBaseClass)
|
|
|
+ private
|
|
|
+ FOwnProperty: Integer;
|
|
|
+ published
|
|
|
+ property SomeProperty;
|
|
|
+ property OwnProperty: Integer read FOwnProperty write FOwnProperty default 11;
|
|
|
+ end;
|
|
|
+
|
|
|
+var
|
|
|
+ BC : TSomeBaseClass;
|
|
|
+ DC: TSomeDerivedClass;
|
|
|
+ Info: PPropInfo;
|
|
|
+begin
|
|
|
+ DC := TSomeDerivedClass.Create;
|
|
|
+ Info := GetPropInfo(DC, 'SomeProperty');
|
|
|
+ if (Info^.Default<>10) then
|
|
|
+ Halt(1);
|
|
|
+ Info := GetPropInfo(DC, 'OwnProperty');
|
|
|
+ if Info^.Default<>11 then
|
|
|
+ Halt(2);
|
|
|
+end.
|
|
|
+
|