检查对象是否继承自泛型类

Bir*_*ger 3 delphi generics inheritance

我有一个通用的列表类:

TMyObjectlist<T: TMyObject> = class(TObjectList<T>);
Run Code Online (Sandbox Code Playgroud)

和派生列表类:

TMyDerivedObjectList = class(TMyObjectList<TMyDerivedObject>);
Run Code Online (Sandbox Code Playgroud)

我想检查TMyDerivedObjectList的实例MyList是否继承自TMyObjectList,但是:

MyList.InheritsFrom(TMyObjectlist<TMyObject>)
Run Code Online (Sandbox Code Playgroud)

返回False.

事实证明,MyList.Classparent属于类型TMyObjectList<TMyDerivedObject>.

在这种情况下,有谁知道如何检查InheritsFrom?

Cos*_*und 6

只需为两个列表对象绘制继承方案,您就会清楚地看到为什么InheritsFrom不起作用.在Generics.Collections中我们有:

TEnumerable<T> = class abstract;
TList<T> = class(TEnumerable<T>);
TObjectList<T> = class(TList<T>);
Run Code Online (Sandbox Code Playgroud)

在您的示例中,我们有:

TMyObject = class;
TMyDerivedObject = class(TMyObject);
Run Code Online (Sandbox Code Playgroud)

所以我们得到了这两个继承树:

TObject
|
TEnumerable<TMyDerivedObject>
|
TList<TMyDerivedObject>
|
TObjectList<TMyDerivedObject>
Run Code Online (Sandbox Code Playgroud)

然后我们有:

TObject
|
TEnumerable<TMyObject>
|
TList<TMyObject>
|
TObjectList<TMyObject>
Run Code Online (Sandbox Code Playgroud)

如您所见,两种列表类型的唯一共同祖先是TObject!