一次性类别的一次性领域是否自动处置

时间:2017-07-05 08:25:05

标签: c#

我的问题相当简单:如果一个实现IDisposable的类具有也是一次性的字段,那么处理该实例也会处理字段值吗?

示例:

假设我有一个班级OuterDisposable,其中有一个字段innerDisposable,其类型是另一个一次性类:

public class OuterDisposable : IDisposable
{
    private InnerDisposable innerDisposable;
}

我打算在OuterDisposable语句中包装using的所有实例,以便自动安全地处理它们:

using (var outerDisposable = new OuterDisposable())
{
    // Stuff
}

但是,我不确定在innerDisposable结束后using会发生什么。处理它是非常重要的,所以我需要确定行为是什么。

我假设明确处置innerDisposable将达到我想要的结果:

public void Dispose()
{
    this.innerDisposable.Dispose();
}

但这有必要吗?如果外部using语句负责处理innerDisposable以及outerDisposable,那么它就是多余的。

那么,这样的一次性田地是如何处理的?

1 个答案:

答案 0 :(得分:2)

selectedArray = [[NSMutableArray alloc]init];是一个接口和模式。除了IDisposableusing中的明确支持之外,它并不是C#语言的真正组成部分。什么都不会“自动”发生。

相反,如果这种处置确实自动发生,请考虑一下。并且进一步考虑,对于类来说,保持对某种可能是一次性的共享资源的引用是完全有效的。您必须创建新语法才能“选择退出”您正在寻找的自动处理。

C#是一种更简单的语言,没有这样的功能。当您(程序员)知道它们不再被使用时,您始终有责任清理foreach个对象。通常,对于像这里的类这样的类,就是在调用自己的IDisposable方法时。