Я немного поискал и думаю, что следующий код гарантированно выдаст результат:
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
переупорядочены?
Гарантируется ли, что первое использование статического объекта вызовет инициализацию его статических членов с последующим созданием его статического конструктора? Для этой программы использование AX
в главном режиме вызовет инициализацию AX
, которая, в свою очередь, инициализирует BX
, затем B ()
и после завершения инициализации AX
, перейдет к A ()
. В заключение, Main ()
выведет AX
и BX`.