我只是好奇这是如何工作的: 在我的类Form1.cs中,我声明了一个静态对象:
public static Class1 class1;
这就是Class1的构造函数的样子:
public Class1()
{
Form1.class1 = null;
}
我希望在MS VS 2010中获得空引用异常
class1 = new Class1();
class1.showMSG();
但它只是执行showMSG()(showMSG不是静态的),就像我从未将对class1的引用设置为null。 有什么想法吗?
答案 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