delphi - RTTI:如何获取声明为类属性的动态数组的值

标签 delphi class delphi-7 rtti

请帮助我。

我查找了存在的问题,但没有找到如何获取delphi类中动态数组中项目(声明为类)的所有已发布属性(我使用Delphi 7 IDE(我不能使用其他版本))

我有这个代码:

  TObjectList = array of TObject;
  TSubClass = class(TObject)
  private
    FFirstName: string;
    FLastName: string;
    FDOB: TDateTime;
    FArray : TObjectList;
  published
    property FirstName: string read FFirstName write FFirstName;
    property LastName: string read FLastName write FLastName;
    property DOB: TDateTime read FDOB write FDOB;
    property MyArray : TObjectList read FArray write FArray ;
  end;

  TListSubClass = array of TSubClass;

  TPersonList = class(TObject)
  private
    FSubClasses: TListSubClass;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    property SubClasses: TListSubClass read FSubClasses write FSubClasses;
  end;

我有 TPersonList 类的 Elem 链接(MyVariable:TPersonList)。

我如何使用 RTTI 获取我的 FSubClasses 和 FArray 数组项的所有已发布属性数据?

如何使用 RTTI 将新数据设置到 FSubClasses?

谢谢你, 谢尔盖。

最佳答案

你所谓的“动态数组”并不是Delphi世界中所谓的“动态数组”。 “动态数组”被定义为 MyVar:例如整数数组。在您的类中,您只有 TList 后代。这些 TList 后代是某种动态存储,但它称为 TList(或 TObjectList),而不是“动态数组”。

所以只需使用 TypInfo 单元即可。

  • GetPropList 将获取所有属性的列表。
  • 然后为每个映射类的 PPropInfo 项调用 GetObjectProp,并检索每个属性的实例。
  • 调用 GetStrProp 检索字符串已发布属性的内容;
  • 调用 GetOrdProp 检索整数已发布属性的内容。
  • 调用 GetFloatProp 获取浮点值,例如 TDateTime。

对于类发布的属性,在调用 GetObjectProp 后,检查返回的实例类型,并根据其类(TObjectList 或 TListSubClass)枚举其内容。

我们在开源 ORM 中使用了这样的方法(我们专门使用了一些面向对象的类来进行属性访问,因此我们不需要typinfo单元)。请参阅http://synopse.info/fossil/finfo?name=SQLite3/SQLite3Commons.pas

关于delphi - RTTI:如何获取声明为类属性的动态数组的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4113480/

相关文章:

Delphi:调用 dll 中的过程后出现访问冲突

delphi - 按钮控件和 TBitmap 的底层替代品,无需编写预混合代码即可正确处理 PNG 透明度

multithreading - 为什么这个线程会在销毁时卡住我的应用程序?

delphi - Delphi 的 NURBS 库

php - 让所有用户使用 OOP 的正确方法

delphi - 在 delphi 7.0 中创建打包结构时出现错误 EStackOverflow

delphi - 变量可能尚未初始化。我可以为字符串打开此警告吗?

c++ - 关于类的 CPP 代码显示错误

jQuery 与 .hasClass() 相反?

delphi - 陷阱键违规