在以下程序中:
{$APPTYPE CONSOLE}
PROGRAM InterfaceInheritance;
USES SysUtils;
TYPE
IMasterInterface = INTERFACE['{7759B57E-C93D-44D7-A1B0-AE0B0901D776}']
PROCEDURE MasterMethod;
END;
IChildInterface = INTERFACE(IMasterInterface)['{3F198901-C6C8-4FA8-BBC8-E2E8F616AA36}']
PROCEDURE ChildMethod;
END;
TYPE
TInstanceObject = CLASS(TInterfacedObject,IChildInterface)
PROCEDURE MasterMethod;
PROCEDURE ChildMethod;
END;
{ TInstanceObject }
PROCEDURE TInstanceObject.MasterMethod;
BEGIN
WRITELN('Master')
END;
PROCEDURE TInstanceObject.ChildMethod;
BEGIN
WRITELN('Child')
END;
VAR
I : TInstanceObject;
Master: IMasterInterface;
Child : IChildInterface;
BEGIN
I:=TInstanceObject.Create;
IF Supports(I,IMasterInterface,Master) THEN Master.MasterMethod;
IF Supports(I,IChildInterface,Child) THEN Child.ChildMethod
END.
我希望它同时写“ Master”和“ Child”,但只写“ Child”。 “支持”是否不支持(原文如此)接口继承?我知道,如果我将IMasterInterface
显式添加到TInstanceObject
类实现的接口中,它将起作用,但是IMasterInterface
是通过仅指定IChildInterface
隐式实现的(如果我删除了实现TInstanceObject.MasterMethod
时,出现编译器错误,因此,如果实现IMasterInterface
,则无法在类中实现IChildInterface
方法。
这是Delphi实现接口的方式,还是我可以做些什么,以便Supports在接口层次结构中向上遍历,以发现IMasterInterface
已实现(尽管是间接实现)?