-3

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

 public static Class1 class1;

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

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

我希望在 MS VS 2010 中得到一个空引用异常

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

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

4

3 回答 3

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;
}

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

于 2012-09-25T20:36:48.277 回答
1

Class1 的构造函数集

Form1.class1 = null;

但是当你执行

class1 = new Class1();

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

于 2012-09-25T20:40:14.797 回答
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
于 2012-09-25T20:57:33.067 回答