2013-04-13 9 views
18

私はただDisposeパターンを実装していました。ちょうどGC.SuppressFinalize(this)という行をタイプしたとき、メソッドのパラメータとしてthis以外のものを使用するユースケースがあるかどうか疑問に思っていました。GC.SuppressFinalize(this)を呼び出すときに "this"を使用しないというユースケースはありますか?

これが典型的なパターンです:

public void Dispose() 
{ 
    Dispose(true); 
    GC.SuppressFinalize(this); // right here 
} 

は、それは今までthis以外のものでGC.SuppressFinalize()を呼び出すために理にかなっていますか? MSDNによると

public void Dispose() 
{ 
    Dispose(true); 
    GC.SuppressFinalize(foo); // should this ever happen? 
} 
+9

ファイナライザとDispose()メソッドを持つサードパーティのクラスを使用していて、なんらかの理由で 'GC.SuppressFinalize()'を呼び出さない場合に便利だと思う唯一の時間です。その後、Dispose()を呼び出した後、オブジェクトexplicityのSuppressFinalize()を呼び出すことで、理論的に修正できます。しかし、それはかなり遠くに聞こえます。 –

+2

もちろん、あまり一般的ではない用途があります。オブジェクトプールのようなもの。しかし、それはSOのための良い質問ではありません。 –

+1

本当に多くのシナリオはありません。また、サイドバーの質問(GC.SupressFinalize()を使用する必要がありますか?)によれば、トップの答えは次のように言います|他のオブジェクトのSuppressFinalizeを呼び出すように誘惑しないでください。それは起こるのを待っている重大な欠陥です。 –

答えて

2

http://msdn.microsoft.com/en-us/library/system.gc.suppressfinalize.aspx

あなたの例ということで可能です:GC.SuppressFinalize(FOO) は、特定のシナリオではなく、のシナリオで使用されます共通の処分パターン。

例では、オブジェクト内から一般的なdisposeパターンを実装するのではなく、何らかの種類のdispose管理パターンを多くのオブジェクトに書きたい場合があります。もう1つの選択肢は、オブジェクトを抑制したままにしておき、後でそれを主張する場合です。決してそれをしなかった。しかしそれは可能である。

可能です。はい可能性があります。おそらく決して起こらない可能性があります。

関連する問題