なにやら気をつける事があるようなので自分用テンプレート。
以下ソースコード
using System; namespace Samples { // 参考: http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/cpgenref/html/cpconfinalizedispose.asp class Disposable : IDisposable { public bool IsDisposed { get; private set; } protected Disposable() { IsDisposed = false; } public void Dispose() { Dispose(true); // Finalizer が呼ばれないようにする。 GC.SuppressFinalize(this); } ~Disposable() { Dispose(false); } protected virtual void Dispose(bool disposing) { // Dispose() 内では Exception を発生させない設計にするべき。 // Dispose() が何度も呼ばれる場合でも例外を発生させない。 if (!IsDisposed) // 初回以外は何もしない { // IsDisposed = true; 呼び出された時点ですぐに true にするべきか? if (disposing) // Dispose() から呼ばれた場合 { // マネージドリソースを解放 (例: stream.Close()) } // アンマネージドリソースを解放 (例: CloseHandle(IntPtr)) // null を設定 (例: stream = null) IsDisposed = true; // 継承クラスはここで base.Dispose(disposing) する。 // try catch finally { base.Dispose(disposing); } とか。 } } } }