请帮助我。
我查找了存在的问题,但没有找到如何获取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/