【发布时间】:2011-06-07 11:00:02
【问题描述】:
我正在重写一个虚拟方法,我想调用 inherited。但我不想调用立即祖先,我想调用之前。
TObject
TDatabaseObject
TADODatabaseObject <---call this guy
TCustomer <---skip this guy
TVIP <---from this guy
我尝试将 myself 转换为祖先,并在其上调用方法,但它导致递归堆栈溢出:
procedure TVip.SetProperties(doc: IXMLDOMDocument);
begin
TADODatabaseObject(Self).SetProperties(doc); //skip over TCustomer ancestor
...
end;
我尝试添加 inherited 关键字,但编译失败:
procedure TVip.SetProperties(doc: IXMLDOMDocument);
begin
inherited TADODatabaseObject(Self).SetProperties(doc); //skip over TCustomer ancestor
...
end;
可能吗?
【问题讨论】:
-
@Ian 我认为现在应该为你敲响警钟了!你系统这部分的设计不可能是对的。
-
@David Heffernan 你是对的。但是假设祖先是
TListView,我真的无法重新设计一个我无法控制的类。 -
@Ian 你在什么时候有控制权? TADO 数据库对象?客户?
-
@David Heffernan 我提出了没人知道答案的棘手问题。
-
@Ian 哈哈。我想说虽然我(以及其他人)回答了你的问题stackoverflow.com/questions/4616535,但你不接受......
标签: delphi inheritance