接口继承和支持

时间:2018-08-10 08:07:44

标签: delphi inheritance interface delphi-10.2-tokyo

在以下程序中:

{$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已实现(尽管是间接实现)?

0 个答案:

没有答案