繁体   English   中英

C#:将子级设置为null时父母处置?

[英]C#: Setting child class to null on parents dispose?

我的处置方法正确吗? 在这个问题中,我想问一个问题,但要问一个话题才能更好地理解它。

  • 是否需要在处理时将列表,字典和任何类型的集合设置为null?
  • 我是否需要清除收集中的垃圾?
  • 处理时是否需要将子类设置为null?

以下面的代码为例。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM