我正在使用 RTTI 实现用于流式传输任意 Delphi 对象的通用代码,为了让它工作(更具体地说,为了让加载部分工作),我需要以某种方式获取TObjectList<T>
字段的子项类型不使用任何实际的对象实例。
要求不使用任何实际对象实例的明显原因是,在从流加载对象的情况下(仅基于要加载的对象的类类型的知识),我不会有任何实例在加载完成之前完全可用 - 我宁愿只能访问相关类的纯 RTTI 数据。
我希望能够加载的此类的一个示例如下:
TTestClass = class(TObject)
public
test_list : TList<string>;
end;
我想要的是能够得出结论,该test_list
字段是通用的TList<T>
where T
is string
(即,为了了解子项的流中期望的数据)。
如果该类确实如下所示:
TTestClassWithArr = class(TObject)
public
test_arr : array of string;
end;
我可以使用字段的RTTI 类的ElementType()
方法纯粹通过 RTTI 来提取这些信息,但是我找不到任何对应的这种显式 RTTI 类型。TRttiDynamicArrayType
test_arr
TObjectList<T>
另一个 Stack Overflow 问题(Delphi Rtti: how to get objects fromTObjectList<T>
)是相关的,但确实使用 RTTI 数据反映的对象的实际实例来“作弊”以获取子项目,这又一次,对我来说不是一个选择,因为当时我必须知道这些子项目不存在。
确实感觉应该有某种方法可以通过仅使用类的 RTTI 信息来做到这一点,因为无论对象实例化如何,所有类型信息都在编译时显然存在。