私のプロジェクトには多くのリーダーとライターのクラスがあります。IDisposableの実装を開始しましたが、クラスに多くの定型コードが追加されると思います。クラスごとに、以下を実装する必要があります。
- デストラクタ。
- Dispose()メソッド。
- Dispose(bool disposed)メソッド。
- 「booldisposed」フィールド。
- オブジェクトがすべてのパブリックメソッドにすでに配置されているかどうかを確認するためのチェック。
- ドキュメント(ドキュメントフラグを有効にしていて、コンパイラがそれ以外の場合は警告するため)。
私の質問:
IDisposableを実装する価値はありますか?以前は、次のようなクラスを使用していました。
using (Stream s = File.OpenRead("myfile.bin"))
x = new SomethingReader(s).ReadSomething();
IDisposableを使用すると、あまり改善されません。
using (SomethingReader r = new SomethingReader(File.OpenRead("myfile.bin")))
x = r.ReadSomething();
Dispose()メソッドのみを実装できますか?
私のクラスは管理されていないリソースを使用しないため、Dispose(false)は何もしません。クリーニングしているものもIDisposableであるため、オブジェクトが破棄された後にメソッドを呼び出すと、既に破棄されたオブジェクトを使用しているため、ObjectDisposedExceptionがスローされるはずです。
完全なIDisposableパターンを実装することをお勧めする場合、ボイラープレートコードを減らす方法はありますか?
編集:いくつかの回答はクラスを封印することを推奨しているので、実際には、クラスを封印することで問題がないことを確認できます。