Требуется ли для интерфейса делегирования унаследованного интерфейса класс-оболочка?

Delphi позволяет делегировать интерфейс, используяimplements ключевое слово.

Например

IIndep1 = interface
  function foo2: integer;
end;

IIndep2 = interface
  function goo2: integer;
end;

TIndep1And2 = class(TInterfacedObject, IIndep1, IIndep2)
private
  FNested : IIndep1; //e.g. passed via constructor or internally created (not shown here)
public
   Constructor Create(AIndep1: IIndep1);
  function goo2: integer;
   property AsIndep1 : IIndep1 read FNested implements IIndep1;
end;

Это хорошо работает, но не для унаследованных интерфейсов. (Сообщение об ошибке «Отсутствует реализация метода интерфейса ILev1.foo»)

ILev1 = interface
  function foo: Integer;
end;

ILev2 = interface(ILev1)
  function goo: Integer;
end;

TLev2Fails = class(TInterfacedObject, ILev1, ILev2) //Also fails with ILev2 alone (Error: "ILev1 not mentioned in interface list")
private
  FNested : ILev1; //passed via constructor or internally created 
public
   Constructor Create(AILev1: ILev1);
   function goo: Integer;
   property AsLev1 : ILev1 read FNested implements ILev1;
end;

Обходной путь должен добавить дополнительный класс предка

TLev1Wrapper = class(TInterfacedObject, ILev1)
private
  FNested : ILev1; //passed via constructor or internally created 
public
   Constructor Create(AILev1: ILev1);
   property AsLev1 : ILev1 read FNested implements ILev1;
end;

TLev2Works = class(TLev1Wrapper, ILev2)
public
  function goo: Integer;
end;

Есть ли способ избежать предка класса оболочки?

[EDIT] Просто заметка о делегировании интерфейса, цели использованияimplements Избегать непосредственного удовлетворения интерфейса, но передавать это требование агрегированному или составному члену. Предоставление полного интерфейса и ручное делегирование составному члену сводит на нет преимущества, полученные от использованияimplements направить интерфейс. На самом деле, в этом случаеimplements ключевое слово и свойство могут быть удалены.

Ответы на вопрос(0)

Ваш ответ на вопрос