我有一个通用列表类:
TMyObjectlist<T: TMyObject> = class(TObjectList<T>);
和派生列表类:
TMyDerivedObjectList = class(TMyObjectList<TMyDerivedObject>);
我想检查TMyDerivedObjectList的实例MyList是否从TMyObjectList继承,但是:
MyList.InheritsFrom(TMyObjectlist<TMyObject>)
返回False。
事实证明MyList.Classparent的类型为
TMyObjectList<TMyDerivedObject>
。在这种情况下,有人知道如何检查InheritsFrom吗?
最佳答案
只需为两个列表对象制定继承方案,您就会清楚地看到为什么InheritsFrom无法正常工作。在Generics.Collections中,我们有:
TEnumerable<T> = class abstract;
TList<T> = class(TEnumerable<T>);
TObjectList<T> = class(TList<T>);
在您的示例中,我们有:
TMyObject = class;
TMyDerivedObject = class(TMyObject);
因此,我们得到了这两个继承树:
TObject
|
TEnumerable<TMyDerivedObject>
|
TList<TMyDerivedObject>
|
TObjectList<TMyDerivedObject>
然后我们有:
TObject
|
TEnumerable<TMyObject>
|
TList<TMyObject>
|
TObjectList<TMyObject>
如您所见,这两种列表类型的唯一共同祖先是TObject!