当一个类收集GC时会发生什么?该类的所有成员都被销毁了吗?

时间:2014-12-10 09:27:23

标签: c# .net garbage-collection

考虑以下简单的课程A

class A 
{
    public static int b = 10;
}


  {
    var objA = new A();
    A.b = 30;
    Console.WriteLine("Before GC Collect!");
    Console.WriteLine(A.b);

    objA = null; 
    GC.Collect();  //A is GC Collected

    var objB = new A(); 
    Console.WriteLine("After GC Collect!");
    Console.WriteLine(A.b);
  }

注意:成员bstatic

我期待得到30 before GC collection10 after GC Collection

的答案

object is GC Collected 表示与该类关联的所有静态实例都没有销毁时?

为什么这样?有什么想法吗?

1 个答案:

答案 0 :(得分:3)

删除类的实例后,该实例中的所有实例成员都将被删除。

当删除一个类的一个实例时,该类的所有其他实例都不受影响。

类的静态成员独立于类的实例。类的静态成员在应用程序中存在一次,无论该类有多少实例。静态成员在任何实例之前都存在,并且在所有实例都消失后仍然存在。