Проблема с универсальными шаблонами, интерфейсами и наследованием

Следующий пример дает мне эту ошибку:
[Ошибка DCC] Unit2.pas (54): E2010 Несовместимые типы: 'IBar' и 'Unit2.TFoo '

Я думаю, что проблема где-то в Self.Create Потому что после многих попыток его скомпилировать я случайно ввел FFoo: = TBar (Self) .Create; и он скомпилирован и работал.

Я использую Delphi XE

IFoo = interface
end;

TFoo<T: IInterface> = class(TInterfacedObject, IFoo)
private class var
  FFoo: T;
public class
  function Instance: T;
end;

IBar = interface(IFoo)
end;

TBar = class(TFoo<IBar>, IBar)
end;

class function TFoo<T>.Instance: T;
begin
  if not Assigned(FFoo) then
  begin
    FFoo := Self.Create;
  end;
  Result := FFoo;
end;
6
задан RjK 23 January 2011 в 23:00
поделиться