Подтвердить что ты не робот

Интерфейсы с Generics - настройка на NIL

Я пытаюсь реализовать ясно в следующем примере кода в Delphi 2009.

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" не было ограничено. Но так как "T" должен быть интерфейсом, я бы подумал, что этот синтаксис будет иметь работал.

Есть ли возможность установить FField на NIL, чтобы можно было освободить интерфейс?

4b9b3361

Ответ 1

Вместо nil вы должны использовать новый Default(T), который возвращает значение по умолчанию для общего типа параметра. А для интерфейсов это nil

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