添削お願いしますぅ > えらいひと
/*
* 可及的速やかに破棄したい
* unmanaged-resourceを持ったクラスのテンプレ
*/
public class SampleClass : System.IDisposable {
private object unmanaged_resource; // マネージ対象外リソース
protected bool disposed = false; // Dispose()済みならtrue
// コンストラクタ
public SampleClass() {
// ここでnewしなければならんわけじゃないが
unmanaged_resource = new object();
}
// Dispose()後にメソッドが呼ばれたときの用心のため、
// 各public/protectedメソッドはその処理に先立ちこいつを呼ぶことを推奨する。
protected void assertDisposed() {
if ( disposed ) {
throw new System.ObjectDisposedException(
this.GetType().ToString(),
"has been disposed.");
}
}
// Dispose()の実処理はココで行う
protected void doDispose(bool disposing) {
if ( !disposed ) {
if ( disposing ) {
// managed-resourceを持っている
// ならここでDispose()
}
// ここでunmanaged-resourceを廃棄
}
disposed = true;
}
// Dispose
public virtual void Dispose() {
doDispose(true);
// 後続するFinaraize()を抑止
System.GC.SuppressFinalize(this);
}
// デストラクタ(=Finalize)
public ~SampleClass() {
doDispose(false);
}
}
※ Finalize→~SampleClass に修正しました