这将是一个快速的问题。我不太明白为什么会这样,所以我会告诉你什么是困扰我通过简单的例子..声明和初始化结构变量
第一个例子:
private static Point pt;
public static void Main(string[] args)
{
pt.Display();
}
public struct Point
{
public int X;
public int Y;
public void Display()
{
Console.WriteLine("X = {0}, Y = {1}", X, Y);
}
}
第二个例子:
public static void Main(string[] args)
{
Point pt;
pt.Display();
}
public struct Point
{
public int X;
public int Y;
public void Display()
{
Console.WriteLine("X = {0}, Y = {1}", X, Y);
}
}
我可能会丢失一些明显的东西,但第一个例子编译正确,我在控制台上得到输出,而在第二个例子中它甚至不会编译,因为:
本地变量'pt'在访问之前可能未被初始化。
好吧,它在第一种情况下也没有初始化,但是它完成了工作,有什么意义呢?
P.S.没有双关语意。
哦,静态关键字指示编译器将变量初始化为默认值? – msmolcic 2014-11-06 22:08:25
@Smola不,它与静态无关。对于所有的班级领域来说都是如此。如果你有一个引用类型字段并且不初始化它,你将不会得到一个未初始化的错误,但是如果你试图访问它的成员,你将在运行时得到一个NullReferenceException,因为null是引用类型的默认值。 – 2014-11-06 22:08:51
那么,如果我得到它的权利包含主要方法的新类已经自动创建,当我运行我的程序?就像我写MyClass class = new MyClass();它会自动初始化我的Point结构,并将其变量设置为默认值,但在第二个示例中,情况并非如此,因为Point不是我启动类的私有成员,而是我的主方法中的局部变量? – msmolcic 2014-11-06 22:14:41