読者です 読者をやめる 読者になる 読者になる

ふるすたっくえんじにあっぽい人の日記

ASP .NET MVC (C#)、.NET Framework、iOS (Objective-c) アプリ、Androidアプリ (Java)、AWS、たまにLAMPとかプロジェクトマネジメントあたりのお話

【C# .NET Framework】リソース関連のお話とIDisposableインターフェース

C# .NET Framework

はい。会社寒い。

とりあえず.NET Framework様が扱うリソースの話からー
あ、ちなみに私.NET Framework信者です。はい。

マネージリソース

CLRさんががんばってくれる

アンマネージリソース

CLRさんはスルーする

とゆーことでマネージリソースさんはガベージコレクションの対象ですぉ。
要はアンマネージリソースを使うときは、ちゃんとプログラマが解放してあげないとメモリリークしちゃうぉ。ってことです。

で、IDisposableインターフェースが出てくるわけですが、端的に言ってしまえばアンマネージリソースを保持するようなクラスはIDisposableインターフェース様を実装しよーよって話。

実際よくあるだめ例↓
・マネージリソースしか使ってないのにIDisposableを実装しちゃう
・Disposeが呼び出されないことを考慮しない
・Disposeが複数回呼び出されることを考慮しいない
・IDisposableを実装したクラスをメソッド内で使うのにusing使わないでtry~catch~finallyとかであてずっぽうの処理書いちゃう

で、一番言いたい事。

IDisposableインターフェースを実装するクラスを使うときはusingつかいましょ。
もちろんインスタンス変数として保持する場合はIDisposableインターフェースを実装しましょ。