根据早期帖子中的一个答案,我正在调查以下设计的可能性。
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
,制作非常复杂的公共功能检查似乎很可怕(也很错误!)。
老实说,我对泛型感到非常不舒服,所以这个问题可能非常幼稚。但是,我非常愿意学习。上述解决方案是否可行?TIA!