如果我们的项目中还有一个静态类,那么哪个静态类首先初始化?哪个静态类首先初始化?
例如:下面的代码给出了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