根据对较早帖子的一个回答,我正在调查以下设计的可能性
TChildClass = class(TObject)
private
FField1: string;
FField2: string;
end;
TMyClass = class(TObject)
private
FField1: TChildClass;
FField2: TObjectList<TChildClass>;
end;
现在,在现实世界中,TMyClass 将有 10 个这样的不同列表,所以我希望能够使用 RTTI 来处理这些列表。但是,我对这个类的其他字段不感兴趣,所以我需要检查某个字段是否是某种 TObjectList。这是我到目前为止所得到的:
procedure InitializeClass(RContext: TRttiContext; AObject: TObject);
var
ROwnerType: TRttiType;
RObjListType: TRttiType;
RField: TRttiField;
SchInf: TSchemaInfoDetail;
begin
ROwnerType := RContext.GetType(AObject.ClassInfo);
RObjListType := RContext.GetType(TObjectList<TObject>);
for RField in ROwnerType.GetFields do begin
// How do I check if the type of TMyClass.FField2 (which is TObjectList<TChildClass>) is some sort of TObjectList?
end;
很明显,RField.FieldType <> RObjListType.FieldType
. 但是,他们确实有一些关系,不是吗?对常见功能进行非常精细的检查以使其很可能RField.FieldType
实际上是TObjectList
.
老实说,我对泛型感到很不舒服,所以这个问题可能非常幼稚。但是,我很乐意学习。上述解决方案是否可以实施?蒂亚!