Ví dụ sau đây là đem lại cho tôi lỗi này:
[DCC Error] Unit2.pas(54): E2010 Incompatible types: 'IBar' and 'Unit2.TFoo<Unit2.IBar>'
Vấn đề với Generics và các giao diện và thừa kế
Tôi nghĩ rằng vấn đề là ở đâu đó xung quanh Self.Create Bởi vì sau bao nhiêu cố gắng để làm cho nó biên soạn tôi vô tình bước vào FFoo : = TBar (Tự) .Tạo; và nó được biên soạn và làm việc.
Tôi đang sử dụng 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ỗi này cho bạn biết số dòng. Có lẽ bạn có thể chỉ ra chính xác những gì dòng đó là thay vì đoán nơi mà vấn đề có thể được? –
Lỗi nằm trên dòng sau "kết thúc". – RjK
Việc cast 'TBar (Self) .Tạo' là không mong muốn vì bạn không chắc rằng Self là một TBar ** và ** nó sẽ phá vỡ khái niệm generics (không thể sử dụng cho một class khác)! – TridenT