Delphi 与泛型的接口-设置为NIL

Delphi 与泛型的接口-设置为NIL,delphi,generics,delphi-2009,Delphi,Generics,Delphi 2009,我试图在Delphi2009中的以下示例代码中实现clear interface ... TFoo<T : IInterface> = class(TObject) FField : T; procedure Clear; end; ... implementation ... procedure TFoo<T>.Clear; begin // Line Below Results In // E2010 Incompatible typ

我试图在Delphi2009中的以下示例代码中实现clear

interface
...
  TFoo<T : IInterface> = class(TObject)
    FField : T;
    procedure Clear;
  end;
...
implementation
...
procedure TFoo<T>.Clear;
begin
  // Line Below Results In
  //  E2010 Incompatible types: 'T' and 'Pointer' 
  FField := nil;
end;
...
接口
...
TFoo=类(TObject)
埃菲尔德:T;
程序清晰;
结束;
...
实施
...
程序TFoo.Clear;
开始
//下一行的结果是
//E2010不兼容类型:“T”和“指针”
菲菲尔德:=零;
结束;
...
如果“T”不受约束,我可以理解complie时间错误。 但既然“T”必须是一个接口,我会认为这种语法应该是 成功了


是否可以将FField设置为NIL,以便释放接口?

您必须使用新的
Default(T)
,它返回通用参数类型的默认值,而不是
NIL
。对于接口,它是
nil

procedure TFoo<T>.Clear;
begin
  FField := Default(T);
end;
程序TFoo.Clear;
开始
FField:=默认值(T);
结束;

D2009中的泛型有很多问题。大多数问题都应该在下一次更新中解决,无论何时发布。看起来这就是其中之一。尝试将其报告给QC,在此之前,此解决方案可能是您最好的解决方案。惊喜地看到引用计数代码也发出了。@RyanVanIderstine我希望如此!一个好的老地方:零也会发射它。注意,这个问题在D2010中仍然存在,在DXE2+中修复(我手头没有DXE)。