我进行了一些搜索,我认为以下代码保证会产生输出:
B.X = 7
B.X = 0
A.X = 1
A = 1, B = 0
static class B
{
public static int X = 7;
static B() {
Console.WriteLine("B.X = " + X);
X = A.X;
Console.WriteLine("B.X = " + X);
}
}
static class A
{
public static int X = B.X + 1;
static A() {
Console.WriteLine("A.X = " + X);
}
}
static class Program
{
static void Main() {
Console.WriteLine("A = {0}, B = {1}", A.X, B.X);
}
}
我已经多次运行了这个代码,并且每一次都得到了上面代码部分之外的输出结果;我只是想确认一下,即使在文本上类 A
和类 B
被重新排列,它们也会发生变化吗?
第一次使用静态对象时是否保证会触发静态成员的初始化,随后实例化其静态构造函数?对于这个程序,在主函数中使用 A.X
将触发 A.X
的初始化,然后初始化 B.X
,接着初始化 B()
,等完成 A.X
的初始化后,将会继续初始化 A()
,最后,Main()
函数将输出 A.X
和 B.X
。