我的处理执行是否正确?在这个问题中,我有点问一个问题,但有一个问题可以更好地理解它。
以此代码为例..
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;
}
}
答案 0 :(得分:3)
您所有问题的答案都是否。 .NET程序使用托管代码,这意味着平台将为您清理所有这些对象。
现在,如果您访问非托管资源,例如文件,数据库等,则需要使用IDisposable
来确保及时清理所有非托管资源。< / p>
但像Dictionary<>
之类的东西会自行清理。
答案 1 :(得分:0)
在Dispose()中是否应将成员设置为null可以用不同的方式回答。它(如许多其他答案所述 - 见&#34;相关&#34;在右边)只对那些本身是一次性的成员是必要的。
首先,如果不声明为readonly,它显然只能在Dispose()中将成员设置为null。仅仅因为这个而使它们不是只读可能不是一个好的设计模式。如果 在dispose之后将其设置为null,则还必须在执行此操作之前检查null,因为您必须始终能够多次调用Dispose()而不会产生副作用或异常。将成员设置为null还有助于防止在置置后意外再次使用该对象(因为访问该成员将导致异常)。