IDisposable の必要性について
基本的には実利的な意味は薄いっぽい。
以下の3とか5のような暗黙的なルールに明示させる為のもの?
ガベージコレクション(GC)
- 1 デストラクタは、インスタンスが破棄されるときに実行されますがいつGCにより破棄されるタイミングが制御されるため、破棄されるタイミングがわからず、また必ず実行されるとも限りません。(破棄する前にプログラムが終了したなど)
- 2 リソースの解放は、try~finallyのfinallyブロックで行う。
- 3 IDisposable実装クラスは、オブジェクトの使用後にDispose()メソッドを呼び出す。
- 4 自作クラスでメモリー以外のリソースを使用する場合は、IDisposableインターフェースを実装する。
- 5 基底クラスがIDisposableを実装している場合は、必ず base.Dispose() を実行する。
- 6 Disposeメソッドでは、例外をスローしない。
- 7 usingステートメントを使用してDisposeメソッドの呼び出しを自動化する。