删除其引用后,C#对象仍然存在

时间:2012-09-25 20:34:49

标签: c# reference null

我只是好奇这是如何工作的: 在我的类Form1.cs中,我声明了一个静态对象:

 public static Class1 class1;

这就是Class1的构造函数的样子:

  public Class1()
{
    Form1.class1 = null;
}

我希望在MS VS 2010中获得空引用异常

 class1 = new Class1();
 class1.showMSG();

但它只是执行showMSG()(showMSG不是静态的),就像我从未将对class1的引用设置为null。 有什么想法吗?

3 个答案:

答案 0 :(得分:4)

嗯,根据提供的代码,你在这里实际初始化class1 = new Class1();

您首先将其设置为null

Form1.class1 = null;

之后

  class1 = new Class1(); //INIT THE SAME (ACCORDING TO THE NAME) OBJECT
  class1.showMSG();      //CALL A METHOD ON IT.

编辑

根据编辑问题:

public Class1()
{
    Form1.class1 = null;
}

不会重置任何内容,因为您仍然constructor,在退出时,实际上会构造对象并将其分配给您指定的同一对象null之前。

答案 1 :(得分:1)

Class1的构造函数集

Form1.class1 = null;

但是当你执行

class1 = new Class1();

在构造函数执行之后, class1的赋值(与class1相同)发生。所以Form1.class1现在有一个值。

答案 2 :(得分:1)

也许最容易解释一下,如果你将最后两行分解为:

var tmp = new Class1();  // makes class1 null
class1.showMSG();        // would raise exception, remove this line to proceed
class1 = tmp;            // class1 is no longer null
class1.showMSG();        // no exception, instance exists to call method on