Следующий пример дает мне эту ошибку:
[Ошибка 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;