使い方Dispose()
とデストラクタについて質問があります。いくつかの記事と MSDN のドキュメントを読むと、これが推奨される実装方法Dispose()
とデストラクタのようです。
しかし、この実装について 2 つの質問があります。以下をお読みください。
class Testing : IDisposable
{
bool _disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!_disposed) // only dispose once!
{
if (disposing)
{
// Not in destructor, OK to reference other objects
}
// perform cleanup for this object
}
_disposed = true;
}
public void Dispose()
{
Dispose(true);
// tell the GC not to finalize
GC.SuppressFinalize(this);
}
~Testing()
{
Dispose(false);
}
}
GC.SupressFinalize(this) on Dispose()
プログラマーusing
が Dispose() を明示的に使用または呼び出すと、クラスは を呼び出しGC.SupressFinalize(this)
ます。ここでの私の質問は次のとおりです。
- これは正確には何を意味するのでしょうか? オブジェクトは収集されますが、デストラクタは呼び出されませんか? デストラクタはフレームワークによって Finalize() 呼び出しに変換されるため、答えはイエスだと思いますが、よくわかりません。
Dispose() 呼び出しなしでファイナライズする
GC がオブジェクトを消去しようとしているが、プログラマーが呼び出さなかったとします。Dispose()
- この時点でリソースを処分しませんか? つまり、なぜデストラクタでリソースを解放できないのでしょうか?
if の内側と外側で実行する必要があるコードは何ですか?
if (!_disposed) // only dispose once! { if (disposing) { //What should I do here and why? } // And what here and why? }
前もって感謝します