Poniższy przykład daje mi ten błąd:
[DCC Error] Unit2.pas(54): E2010 Incompatible types: 'IBar' and 'Unit2.TFoo<Unit2.IBar>'
problem z rodzajowych i interfejsów i dziedziczenia
Myślę, że problem jest gdzieś wokół Self.Create Ponieważ po wielu próbach, aby to zestawionych przypadkowo wszedł FFoo : = TBar (Self). Utwórz; i skompilował i pracował.
używam 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;
Błąd informuje o numerze linii. Być może możesz wskazać dokładnie, co to jest linia zamiast zgadywać, gdzie może być problem? –
Błąd pojawia się po "zakończeniu". – RjK
Oddanie 'TBar (Self) .Create' jest niepożądane, ponieważ nie masz pewności, że Self jest TBar ** i ** złamie pojęcie generycznych (nie nadaje się do użycia dla innej klasy)! – TridenT