以前の投稿への 1 つの回答に基づいて、次の設計の可能性を調査しています。
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
.
正直なところ、私はジェネリックにはかなり慣れていないので、質問は非常にナイーブかもしれません. しかし、私は学ぶことが何よりもうれしいです。上記の解決策を実装することは可能ですか? ティア!