IDisposableを実装する正しい方法について、私はいくつかのしつこい疑問を持っています。次のシナリオを考えてみましょう...
public class Foo : IDisposable {...}
public class Bar : IDisposable {
private bool disposed = false;
private readonly Foo MyFoo;
public Bar() {
this.MyFoo = new Foo();
}
public Bar(Foo foo) {
this.MyFoo = foo;
}
~Bar() {
Dispose(false);
}
protected virtual void Dispose(bool disposing) {
if (!this.disposed) {
if (disposing) {
if (MyFoo != null) {
this.MyFoo.Dispose();
this.MyFoo = null;
}
}
this.disposed = true;
}
}
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
}
私の質問は次のとおりです。
1)クラスが使い捨てオブジェクトを作成する場合、そのオブジェクトに対して独自のDispose()メソッドでDispose()メソッドを呼び出す必要がありますか?
2)使い捨てオブジェクトが参照としてクラスに渡された場合、そのクラスは引き続きその参照オブジェクトに対してDispose()メソッドを呼び出す必要がありますか、それとも最初にオブジェクトを作成したクラスに任せる必要がありますか?
上記のパターンは(特にDIで)かなり多く発生するようですが、これを構造化する正しい方法の具体的な例を見つけることができないようです。