IDisposableの典型実装とコードスニペット

(2020/5/10追記) 最新のVisual StudioではIDisposableの実装テンプレートをクイックアクションで生成できるようになっているので、コードスニペットを自前で用意する必要はありません。


stackoverflow.com

この投稿が非常に分かりやすく参考になった。特に、何がマネージドリソースで何かアンマネージドリソースなのかの判断がつくようになり、どうしてそこで区別してDispose(bool)を実装するのかを納得できた。Disposableパターンについて不安な方はぜひ一読を。

あとはMSDNのDisposableパターンの説明*1と、IDisposableの説明*2を見ながら簡単なコードスニペットにしておいた。

もう1つ、以下のガイドラインを今回知った。できるだけアンマネージドリソースをDisposeする必要がないようにして、ファイナライザを書かない方がパフォーマンスも保守性も良い、とのこと。今まで何も考えずにファイナライザ書いていたので、不要なクラスでは消しておくようにしよう。

X AVOID making types finalizable. Carefully consider any case in which you think a finalizer is needed. There is a real cost associated with instances with finalizers, from both a performance and code complexity standpoint.