2010年6月30日水曜日

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)
        {
            // マネージリソースの解放処理
        }
        // アンマネージリソースの解放処理
    }
}


.

0 件のコメント:

ラベル