使用部分委托实现接口

Implementing an interface with partial delegation

我有一个子对象只实现了接口的一部分:

  IMyTest = interface
    procedure P1;
    procedure P2;
  end;

  TMyTestP2Impl = class
    procedure P2;
  end;

  TMyTest = class(TInterfacedPersistent, IMyTest)
  private
    FMyTestP2Impl : TMyTestP2Impl;
  public
    constructor Create();
    destructor  Destroy(); override;
    procedure P1;
    procedure P2;
  end;

所以我要写TMyTest.P2如下:

procedure TMyTest.P2;
begin
  FMyTestP2Impl.P2();
end;

我想知道是否存在将 TMyTest.P2 映射到 FMyTestP2Impl.P2 的有效语法,而无需编写 TMyTest.P2 的实现。我的意思是:

  TMyTest = class(TInterfacedPersistent, IMyTest)
  private
    FMyTestP2Impl : TMyTestP2Impl;
  public
    constructor Create();
    destructor  Destroy(); override;
    procedure P1;
    procedure P2 = FMyTestP2Impl.P2;
  end;

你必须使用 delegation to a class type property:

type
  IMyTest = interface
    procedure P1;
    procedure P2;
  end;

  TMyTestP2Impl = class
    procedure P2;
  end;

  TMyTest = class(TInterfacedPersistent, IMyTest)
  private
    FMyTestP2Impl: TMyTestP2Impl;
    property MyTestP2Impl: TMyTestP2Impl read FMyTestP2Impl implements IMyTest;
  public
    constructor Create;
    destructor  Destroy; override;
    procedure P1;
  end;