Disposeの書き方, usingステートメント

file操作は必ずtry - catch - finally finallyの中でClose()する。

こういうパターン(try句の中でリソースに対して操作を行い finallyでDispose()する)を「Disposeパターン」という。

だが、毎回手でそのパターンを書くのはだるい → usingステートメントという機能が言語レベルでサポートされた

Resource r = new Resource();
try
{
  リソースに対する操作
}
finally
{
  if(r != null)
    r.Dispose();
}

using(Resource r = new Resource())
{
  リソースに対する操作
}

は等価。ただし、この場合Resourceクラスは System.IDisposable インターフェースを実装している必要がある。

IDisposable の継承は後処理のタイミング管理が必要というサインです。 IDisposable を継承したクラスでは必ず using を使うというように心がけた方がいいでしょう。

Dispose()は正しく実装する必要がある。

[雑記] Dispose にまつわる余談

MSDN Implementing a Dispose Method

ファイナライザ

ちなみに、 ガベコレのタイミングで動作する ファイナライザ は くっそ重いしリークの危険があるので出来る限り使わないように。