Microsoft.NET Frameworkは、メソッドIDisposable
の実装を必要とするインターフェイスを提供しますvoid Dispose()
。IDisposable
その目的は、実装が割り当てた可能性のある高価なリソースの手動またはスコープベースのリリースを可能にすることです。例には、データベースコレクション、ストリーム、ハンドルが含まれます。
私の質問は、Dispose()
メソッドの実装がべき等である必要があるかどうかです。同じインスタンスで複数回呼び出された場合、インスタンスは1回だけ「破棄」され、後続の呼び出しは例外をスローしません。Javaでは、同様の動作をするオブジェクトのほとんど(ここでもストリームとデータベース接続が例として思い浮かびます)は、そのclose()
操作に対してべき等であり、これはたまたまDispose()
メソッドの類似物です。
ただし、.NET(および特にWindowsフォーム)に関する私の個人的な経験では、すべての実装(.NET Framework自体の一部)がべき等であるとは限らないため、これらを呼び出すと、がスローされObjectDisposedException
ます。これは、使い捨てオブジェクトの実装にどのようにアプローチすべきかについて私を本当に混乱させます。シナリオに対する一般的な答えはありますか、それともオブジェクトの具体的なコンテキストとその使用法に依存していますか?