Delphi - 从类和接口继承(适配器模式)?

时间:2011-03-18 14:48:27

标签: delphi inheritance interface delphi-2007

我正在尝试执行GoF适配器模式,并且在C#示例中,我遵循Adapter类继承原始类和适配接口。 在Delphi(2007)中,据我所知,这是不可能的,或者是这样吗?如果一个类继承了一个接口,它需要从TInterfacedObject继承,因为Delphi不允许多个类继承,这就是故事的结尾。我无法同时从自定义类和接口继承。

我说错了吗?

谢谢。

我已在http://delphipatterns.blog.com/2011/02/22/decorator-5/

上实施此模式

1 个答案:

答案 0 :(得分:14)

不,这不正确。您可以将接口添加到您喜欢的任何类中,如下所示:

type
  IAdapter = interface
    procedure DoSomething;
  end;

  TAdapter = class(TBaseClass, IInterface, IAdapter)
  private
    FRefCount: Integer;
    procedure DoSomething;
  protected
    function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
    function _AddRef: Integer; stdcall;
    function _Release: Integer; stdcall;
  end;

function TAdapter.QueryInterface(const IID: TGUID; out Obj): HResult;
begin
  if GetInterface(IID, Obj) then
    Result := 0
  else
    Result := E_NOINTERFACE;
end;

function TAdapter._AddRef: Integer;
begin
  Result := InterlockedIncrement(FRefCount);
end;

function TAdapter._Release: Integer;
begin
  Result := InterlockedDecrement(FRefCount);
  if Result = 0 then
    Destroy;
end;

procedure TAdapter.DoSomething;
begin
end;