私はただ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?
}
ファイナライザとDispose()メソッドを持つサードパーティのクラスを使用していて、なんらかの理由で 'GC.SuppressFinalize()'を呼び出さない場合に便利だと思う唯一の時間です。その後、Dispose()を呼び出した後、オブジェクトexplicityのSuppressFinalize()を呼び出すことで、理論的に修正できます。しかし、それはかなり遠くに聞こえます。 –
もちろん、あまり一般的ではない用途があります。オブジェクトプールのようなもの。しかし、それはSOのための良い質問ではありません。 –
本当に多くのシナリオはありません。また、サイドバーの質問(GC.SupressFinalize()を使用する必要がありますか?)によれば、トップの答えは次のように言います|他のオブジェクトのSuppressFinalizeを呼び出すように誘惑しないでください。それは起こるのを待っている重大な欠陥です。 –