如果我有这样的课程:

TServerSettings = class(TSettings)
strict private
    FHTTPPort : Integer;
published
    property HTTPPort : Integer read FHTTPPort write FHTTPPort default 80;
end;


如何使用RTTI获取default属性的HTTPPort属性?

最佳答案

像这样:

{$APPTYPE CONSOLE}

uses
  System.TypInfo;

type
  TMyClass = class
  strict private
    FMyValue: Integer;
  published
    property MyValue: Integer read FMyValue default 42;
  end;

var
  obj: TMyClass;
  PropInfo: PPropInfo;

begin
  obj := TMyClass.Create;
  PropInfo := GetPropInfo(obj, 'MyValue');
  Writeln(PropInfo.Default);
end.


请注意,问题所在的类已损坏。创建实例时,系统不会自动将属性初始化为默认值。您需要向该类添加一个构造函数才能做到这一点。

07-25 21:17