L'esempio seguente mi sta dando questo errore:
[DCC Error] Unit2.pas(54): E2010 Incompatible types: 'IBar' and 'Unit2.TFoo<Unit2.IBar>'
Problema con i generici e interfacce ed ereditarietà
Credo che il problema è da qualche parte intorno al Self.Create Perché dopo molti tentativi per farlo compilato ho accidentalmente entrato FFOO : = TBar (auto). Crea; e ha compilato e lavorato.
sto usando 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;
L'errore indica un numero di riga. Forse potresti indicare esattamente quale linea invece di indovinare dove potrebbe essere il problema? –
L'errore è sulla linea dopo "fine". – RjK
Il cast 'TBar (Self) .Create' non è voluto perché non sei sicuro che Self sia un TBar ** e ** romperà il concetto di generici (non utilizzabile per un'altra classe)! – TridenT