![](/img/trans.png)
[英]What is the difference between Dispose and setting reference to null in C#?
[英]C#: Setting child class to null on parents dispose?
我的处置方法正确吗? 在这个问题中,我想问一个问题,但要问一个话题才能更好地理解它。
以下面的代码为例。
public class ParentClass : IDisposable
{
private readonly ChildClass;
public ParentClass()
{
ChildClass = new ParentClass();
}
public void Dispose()
{
ChildClass.Dispose();
ChildClass = null;
}
}
public class ChildClass : IDisposable
{
private Dictionary<int> myIds;
public ChildClass()
{
myIds = new Dictionary<int>();
}
public void Dispose()
{
myIds.Clear();
myIds = null;
}
}
您所有问题的答案是否定的 。 .NET程序使用托管代码,这意味着平台将为您清理所有这些对象。
现在,如果您访问文件,数据库等非托管资源,则需要使用IDisposable
来确保及时清理所有非托管资源。
但是像Dictionary<>
这样的东西会自行清理。
可以用不同的方式回答是否在Dispose()中将成员设置为null。 (如许多其他答案所述-参见右侧的“相关”)仅对于本身是一次性的成员是必需的。
首先,如果未将成员声明为只读,则很可能仅在Dispose()中将成员设置为null。 因此,仅将它们设置为非只读可能不是一个好的设计模式。 如果确实在处理之后将其设置为null,则还必须在执行此操作之前检查是否为null,因为您必须始终能够多次调用Dispose()且没有副作用或异常。 将成员设置为null还有助于防止在处置后再次意外使用该对象(因为访问该成员将导致异常)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.