【发布时间】:2017-07-05 08:25:05
【问题描述】:
我的问题很简单:如果实现IDisposable 的类具有也是一次性的字段,那么处置实例是否也会处置字段值?
示例:
假设我有一个类OuterDisposable,其中有一个字段innerDisposable,其类型是另一个一次性类:
public class OuterDisposable : IDisposable
{
private InnerDisposable innerDisposable;
}
我打算将 OuterDisposable 的所有实例包装在 using 语句中,以便自动安全地处理它们:
using (var outerDisposable = new OuterDisposable())
{
// Stuff
}
但是,我不确定一旦到达using 的末尾,innerDisposable 会发生什么。正确处理它非常重要,因此我需要确定行为将是什么。
我认为明确处理 innerDisposable 将达到我想要的结果:
public void Dispose()
{
this.innerDisposable.Dispose();
}
但这有必要吗?如果外部using 语句负责处理innerDisposable 以及outerDisposable,那么它是多余的。
那么,这些一次性字段是如何处理的呢?
【问题讨论】:
-
不,
OuterDisposable.Dispose方法必须处理它,using只是确保调用了Dispose。 -
包装
IDisposable类的using只调用Dispose的IDisposable函数,它不会检查对象的IDisposable 属性,因此您的假设是正确的 -
您可以通过在inner的dispose方法中放置某种调试语句来轻松检查自己的行为。
标签: c#