下面的例子給我這個錯誤:
[DCC Error] Unit2.pas(54): E2010 Incompatible types: 'IBar' and 'Unit2.TFoo<Unit2.IBar>'
問題與泛型和接口和繼承
我認爲這個問題是地方由於許多試圖把它編譯我不小心進入FFoo後圍繞Self.Create := TBar(Self).Create;它編譯和工作。
我使用德爾福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;
錯誤告訴你一個行號。也許你可以指出究竟是什麼路線,而不是猜測問題出在哪裏? – 2011-01-23 22:15:41
錯誤發生在「結束」之後。 – RjK 2011-01-23 22:59:44
由於您不確定Self是TBar **還是**它會打破泛型的概念(不適用於其他課程),所以鑄造`TBar(Self).Create`是不必要的! – TridenT 2011-01-24 08:53:02