避免显式调用Dispose()是否合理?

Nic*_*pat 9 c# idisposable

它是合理的,使对显式调用规则Dispose()的有关IDisposable对象?

是否存在using声明无法正确确保IDisposable清除对象的情况?

Eri*_*ert 11

它是合理的,使对显式调用规则Dispose()的有关IDisposable对象?

没有.

是否存在using声明无法正确确保IDisposable清除对象的情况?

在某些情况下,使用using处理对象毫无意义.例如,对象的所需生命周期不受包含using语句的方法的特定激活的约束的所有情况.

考虑例如一个"接管"另一个一次性物体的一次性物体."外部"对象可以通过using块来处理,但是"内部"对象(可能存储在外部对象的私有字段中)如何在没有明确调用的情况下进行处理Dispose()

  • @EricLippert,我认为Dispose被用于正确性并不罕见.例如,在`StreamWriter`上调用`Dipose()`会刷新其缓冲区.不调用它(并依赖于终结)意味着永远不会刷新缓冲区,因此文件的内容不正确. (2认同)

Jar*_*Par 5

在某些情况下,根本不可能避免显式调用Dispose并仍然保持正确的语义.例如,考虑IDisposable具有类型字段的对象IDisposable.他们必须明确要求Dispose处置该领域

class Container : IDisposable {
  private readonly IDisposable _field;

  public void Dipose() {

    // Don't want a using here.
    _field.Dispose();
  }
}
Run Code Online (Sandbox Code Playgroud)