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

时间:2018-01-13 16:48:32

标签: c# .net

我的处理执行是否正确?在这个问题中,我有点问一个问题,但有一个问题可以更好地理解它。

  • 我是否需要设置列表,词典和任何类型的集合 处置时为null?
  • 我是否需要在处理时清除收藏品?
  • 我是否需要在dispose上将子类设置为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;
    }
}

2 个答案:

答案 0 :(得分:3)

您所有问题的答案都是。 .NET程序使用托管代码,这意味着平台将为您清理所有这些对象。

现在,如果您访问非托管资源,例如文件,数据库等,则需要使用IDisposable来确保及时清理所有非托管资源。< / p>

但像Dictionary<>之类的东西会自行清理。

答案 1 :(得分:0)

在Dispose()中是否应将成员设置为null可以用不同的方式回答。它(如许多其他答案所述 - 见&#34;相关&#34;在右边)只对那些本身是一次性的成员是必要的。

首先,如果声明为readonly,它显然只能在Dispose()中将成员设置为null。仅仅因为这个而使它们不是只读可能不是一个好的设计模式。如果 在dispose之后将其设置为null,则还必须在执行此操作之前检查null,因为您必须始终能够多次调用Dispose()而不会产生副作用或异常。将成员设置为null还有助于防止在置置后意外再次使用该对象(因为访问该成员将导致异常)。