2009-05-25 91 views
12

我想實現在下面的示例代碼清楚德爾福2009年接口與泛型 - 設置爲NIL

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; 
... 

我能理解complie時間錯誤,如果「T」並沒有限制。 但是由於「T」必須是一個接口,我會認爲這個語法會有 工作。

是否有將FField設置爲NIL,因此界面可以被釋放?

回答

19

而不是nil您必須使用新的Default(T)它返回通用參數類型的默認值。而對於接口它是nil

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

D2009中泛型有很多問題。它們中的大多數應該在下一次更新中解決,只要它出來。看起來這是其中之一。嘗試將其報告給QC,在此之前,此解決方案可能是您最佳的解決方法。 – 2009-05-25 17:38:49