我的问题相当简单:如果一个实现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
,那么它就是多余的。
那么,这样的一次性田地是如何处理的?
答案 0 :(得分:2)
selectedArray = [[NSMutableArray alloc]init];
是一个接口和模式。除了IDisposable
和using
中的明确支持之外,它并不是C#语言的真正组成部分。什么都不会“自动”发生。
相反,如果这种处置确实自动发生,请考虑一下。并且进一步考虑,对于类来说,保持对某种可能是一次性的共享资源的引用是完全有效的。您必须创建新语法才能“选择退出”您正在寻找的自动处理。
C#是一种更简单的语言,没有这样的功能。当您(程序员)知道它们不再被使用时,您始终有责任清理foreach
个对象。通常,对于像这里的类这样的类,就是在调用自己的IDisposable
方法时。