Основываясь на одном ответе на более раннюю публикацию , я изучаю возможность следующего дизайна
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
.
Если честно, я довольно неудобен с дженериками, поэтому вопрос может быть очень наивным. Тем не менее, я более чем счастлив учиться. Возможно ли реализовать вышеуказанное решение? ТИА!