假设我有以下课程:

Class MainClass
{
   private OtherClass1;
   MainClass()
   {
      OtherClass1 = new OtherClass1();
   }

   void dispose()
   {
      OtherClass1 = null;
   }
}

class OtherClass1
{
   private OtherClass2;
   OtherClass1()
   {
      OtherClass2 = new OtherClass2();
   }
}

class OtherClass2
{
}


如果我使MainClass无效,以后再调用dispose方法,OtherClass1是否会被垃圾回收(以后)?还是我必须首先清除对OtherClass2的引用?

最佳答案

在提供的代码中,您无需任何操作,都可以安全地删除null,一切都会好起来的。

如果您的OtherClass1和/或OtherClass2是托管资源,即它们实现了dispose()接口,则您的代码不够好。然后,您将必须链接Dispose:

class MainClass : IDisposable
{
   private OtherClass1;
   MainClass()
   {
      OtherClass1 = new OtherClass1();
   }

   public void Dispose()
   {
      OtherClass1.Dispose();
      // OtherClass1 = null;  // not needed
   }
}

10-07 16:34