如果我們的項目中還有一個靜態類,那麼哪個靜態類首先初始化?哪個靜態類首先初始化?
例如:下面的代碼給出了null異常。
class Program
{
static void Main(string[] args)
{
First.Write();
Second.Write();
}
}
static class First
{
public static int[] firstArray = new int[20];
public static int[] secondArray = Second.secondArray;
public static void Write()
{
Console.WriteLine(firstArray.ToString());
Console.WriteLine(secondArray.ToString());
}
}
static class Second
{
public static int[] firstArray = First.firstArray;
public static int[] secondArray = new int[30];
public static void Write()
{
Console.WriteLine(firstArray.ToString());
Console.WriteLine(secondArray.ToString());
}
}
如果你留意,你會看到,如果First
類將初始化自己這樣的Second
secondArray
領域將是空的。但是,如果Second
類將首先初始化,那麼Second
類firstArray
將爲空。我想告訴哪個初始化會產生不同的結果。
我認爲這是關於我的項目的抽象問題。我在試圖理解爲什麼會得到意想不到的結果時遇到它。
是否標準保證這個命令?我的猜測是,每個類在第一次訪問之前初始化爲一些未定義的類,這會將其變爲隨機解決的依賴性循環。 – 2010-07-01 11:28:16
@Tim:我已經更新了我的答案 - 沒有靜態構造函數,順序確實是未定義的。 – 2010-07-01 11:28:48
隨着調試器附加到VS2005,一件壞事發生 - 'Second.firstArray'被設置爲'null' – AakashM 2010-07-01 11:29:56