我正在覆盖一个虚方法,我想调用继承。但我不想打电话给直接的祖先,我想先打电话给那个。
TObject TDatabaSEObject TADODatabaSEObject <---call this guy TCustomer <---skip this guy TVIP <---from this guy
我尝试将自己作为祖先投射,然后调用该方法,但它导致递归堆栈溢出:
procedure TVip.SetProperties(doc: IXMLDOMDocument); begin TADODatabaSEObject(Self).SetProperties(doc); //skip over TCustomer ancestor ... end;
我尝试添加继承的关键字,但不编译:
procedure TVip.SetProperties(doc: IXMLDOMDocument); begin inherited TADODatabaSEObject(Self).SetProperties(doc); //skip over TCustomer ancestor ... end;
可能?
解决方法
你不能用常规的语言方式,因为这会破坏语言的面向对象方面。
你可以摆弄指针和聪明的演员来做到这一点,但在开始回答之前:这真的是你想要的吗?
正如其他人所说:你的需要听起来像一个严肃的“设计气味”(类似于code smell,但更严重。
编辑:
走下指针摆弄道路可能会在短期内节省你的工作,并且从长远来看你需要花费数周时间。
这样可以很好地阅读:Upstream decisions,downstream costs。