Определен ли порядок инициализации статического класса в C #?

Я провел некоторый поиск и думаю, что следующий код гарантированно выдаст результат:

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`.

Ответы на вопрос(2)

Ваш ответ на вопрос