這將是一個快速的問題。我不太明白爲什麼會這樣,所以我會告訴你什麼是困擾我通過簡單的例子..聲明和初始化結構變量
第一個例子:
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