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?
只需为两个列表对象绘制继承方案,您就会清楚地看到为什么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!