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()は正しく実装する必要がある。
MSDN Implementing a Dispose Method
ファイナライザ
ちなみに、 ガベコレのタイミングで動作する ファイナライザ は くっそ重いしリークの危険があるので出来る限り使わないように。