我对实现 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),但我似乎无法找到一个具体示例来说明构建它的正确方法。