前回の記事
[Memo] デストラクタが呼ばれるタイミングの検証 その1
[Memo] デストラクタが呼ばれるタイミングの検証 その2 ~GC.Collect~
[Memo] デストラクタが呼ばれるタイミングの検証 その3 ~IDisposableインターフェースの実装~
タイトルは「デストラクタが呼ばれるタイミングの検証」となっていますが、内容は副題の方となります。
前回の検証で、Disposeによるリソースの解放について見ました。
今回は解放したリソースにアクセスされた場合の対処方法についてです。
前回の CsvWriterクラスを見ていただけるとわかるのですが、_isDisposedという変数を準備しています。
そして、ReleaseObjectメソッドの中で _isDisposed = true; とし、オブジェクトを解放したことをわかるようにしています。
解放されたリソースにアクセスされないようにするには、この変数をチェックすればOKです。
ということで、解放後にアクセスされたくない場所でチェックできるようにしておきます。
以下のようなコードを埋め込んでおくとよいでしょう。
if (_isDisposed) return;
また、解放されたオブジェクトにアクセスされた場合にスローする例外として ObjectDisposedException というものがあります。
先ほどのコードとともに使用する場合には、以下のように記述すればよいでしょう。
if (_isDisposed) throw new ObjectDisposedException(GetType().FullName);
以上で検証を終わりたいと思います。
Please follow and like us:
コメント