我做了一些搜索,我认为以下代码可以保证产生输出:
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
在 main 中使用会触发 的初始化,然后A.X
依次初始化B.X
,然后B()
在完成初始化之后A.X
,将继续执行A()
。最后,Main()
将输出A.X
和BX`。