我有一个通用列表类:

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!

09-11 20:31