基於一個答案到一個較早的post,我調查了以下設計的可能性,現在德爾福:RTTI和TObjectList <TObject>
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!
謝謝梅森。我認爲將此標記爲2010年的問題有點矯枉過正。 – conciliator 2010-04-01 19:15:37