IDisposable実装のテンプレート
毎回調べてたので、テンプレートとして残しておく。
Disposeメソッドはusingでかこっても、非同期例外によってDisposeが呼び出されないことがあるので、IDisposableを実装する際には、アンマネージドオブジェクトを解放するためにファイナライザを実装しておく必要があります。
非同期例外恐ろしいですね。
public class DisposableImplClass : IDisposable { private bool disposed; public DisposableImplClass() { disposed = false; } public void Dispose() { GC.SuppressFinalize(this); Dispose(true); } ~DisposableImplClass() { Dispose(false); } private void Dispose(bool disposing) { if (disposed) { return; } disposed = true; if (disposing) { // マネージリソースの解放処理 } // アンマネージリソースの解放処理 } }
.