Delphi-наследовать от класса и интерфейса (шаблон адаптера)?
Я пытаюсь сделать шаблон адаптера GoF, и в Примере C#, который я следую, класс адаптера наследует исходный класс и адаптирующийся интерфейс. В Delphi (2007), насколько я знаю, это невозможно, или это так? Потому что если класс наследует интерфейс, он должен наследовать от TInterfacedObject, а поскольку Delphi не допускает множественного наследования классов, это конец истории. Я не могу наследовать от пользовательского класса и интерфейса одновременно.
Am Я прав?
Спасибо.
Я реализовал этот шаблон на http://delphipatterns.blog.com/2011/02/22/decorator-5/
1 ответ:
Нет, что это не правильно. Вы можете добавить интерфейс к любому классу следующим образом:
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;