【发布时间】:2015-04-19 09:13:00
【问题描述】:
如果我有这 3 个接口
unit Interfaces;
interface
type
IA = interface['{86367399-1601-4FDD-89CF-362E762D948E}']
procedure doSomething;
end;
IB = interface['{070B9364-4A57-4E5A-BBA7-FBF1C6A48C5A}']
procedure doSomething;
end;
IC =interface(IB)['{DAC8021C-42CB-40EC-A001-466909044EC3}']
procedure doSomething;
end;
implementation
end.
如何解决实现 IA 和 IC 的类中的命名冲突? 我对 IA 和 IC 没有问题,但我如何实现 IB?
type
myClass = class(TInterfacedObject, IA, IC)
procedure doASomething;
procedure doBSomething;
procedure doCSomething;
procedure IA.doSomething = doASomething;
// ??? = doBSomething;
procedure IC.doSomething = doCSomething;
end;
【问题讨论】:
-
扩展
IB(即IC)重新声明一个相同的方法真的有意义吗?由于IC扩展了IB,procedure doSomething;已经可用。作为使用IC实现的客户,您如何称呼IC 的doSomething和IB 的doSomething? -
@CraigYoung
(intf as IB).doSomething()或(intf as IC).doSomething() -
@DavidHeffernan 不,我指的不是这个,但我能理解这种困惑。
IC有 2 个相同的doSomethings:它自己的,一个来自它扩展的接口。那么客户如何指示要调用这两个中的哪一个呢?如果对象仅实现IC而不是IB,则(intf as IB)将无效。此外,如果一个对象确实实现了IB和IC,那么它需要提供对3 个单独的doSomethings 的访问;以及客户如何区分所有 3 个?
标签: delphi inheritance interface