.Net中的对象处理

sys*_*ard 1 .net c# dispose object

假设我有以下课程:

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

   void dispose()
   {
      OtherClass1 = null;
   }
}

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

class OtherClass2
{
}
Run Code Online (Sandbox Code Playgroud)

如果我实例化MainClass并稍后调用dispose方法,那么OtherClass1是否会被垃圾收集(稍后)?或者我是否首先清除对OtherClass2的引用?

Geo*_*ett 6

如果对象没有引用,则会收集垃圾,或者它所引用的引用来自本身没有引用的对象(等等).

一种可视化的方法是,垃圾收集器将遍历对象引用图,跟随所有对象引用,记录它到达的对象(仍然从某处引用).它没有得到的任何东西都有资格进行垃圾收集,好像它没有找到它们那么它们就不可能被使用了.

请参阅此处获取深入信息(特别是"垃圾收集算法"):http://msdn.microsoft.com/en-us/magazine/bb985010.aspx

所以是的,它有资格成为GC.


另外,如果你有一个dispose方法,你真的应该实现IDisposable.