2009-05-25 10 views
12

に設定すると、私は「T」が制約されなかった場合、私はcomplie時エラーを理解することができインターフェース - 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; 
... 

デルファイ2009年に次のコード例では明確な実装しようとしています。 しかし、 "T"はInterfaceでなければならないので、私はこの構文で が働いていると思っていたでしょう。

FFieldをNILに設定する予定があるので、インターフェイスを解放できますか?

答えて

19

nilの代わりに、汎用パラメータタイプのデフォルト値を返す新しいDefault(T)を使用する必要があります。インターフェイスの場合はnil

+0

D2009のジェネリックスには多くの問題があります。それが出てくるときはいつでも、次のアップデートで解決されるはずです。これはその1つのように見えます。それをQCに報告してください。それまでは、この解決策がおそらく最も良い解決策です。 –

+1

参照カウントコードも同様に発行されていることに驚いています。 –

+0

@RyanVanIderstine私はそう願っています!いい古いFField: - nilもそれを出すでしょう。 DXE2 +で修正されたD2010にも問題が残っていることに注意してください(DXEは手元にありません)。 –

関連する問題