オブジェクトの初期化処理はクラスのコンストラクタで記述すればよいですが、終了処理をどこに記述するとよいでしょうか?
コンストラクタと対になるデストラクタがありますが、.NETの場合メモリ管理をシステムが自動的に行っている関係上、デストラクタがいつ実行されるかはユーザー側からコントロールが難しいです。意図的オブジェクトを破棄する場合Dispose()メソッドを実行するのですが、ユーザーが作成するクラスにもIDisposableインターフェイスを組み込むことでDispose()を実装することが出来ます。
そうして作成したオブジェクトをusingを使ことでDispose()内で記述した終了処理の実行を強制することが出来るようになります。
using System;
class SampleClass : IDisposable
{
public SampleClass() { Console.WriteLine("コンストラクタ");}
public void Say() { Console.WriteLine("処理"); }
public void Dispose() { Console.WriteLine("終了処理"); }
}
class Program
{
static void Main()
{
using( var a = new SampleClass())
{
a.Say();
}
}
}
実行結果
コンストラクタ
処理
終了処理
コメント