与泛型的接口 - 设置为NIL

时间:2009-05-25 17:00:51

标签: delphi generics delphi-2009

我正在尝试在Delphi 2009中的以下示例代码中实现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;
...

如果“T”没有受到约束,我可以理解complie时间错误。 但由于“T”必须是一个接口,我会认为这种语法会有 工作

是否可以将FField设置为NIL,因此可以释放界面?

1 个答案:

答案 0 :(得分:20)

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

procedure TFoo<T>.Clear;
begin
  FField := Default(T);
end;