Является ли порядок инициализации статического класса в 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 переупорядочены?

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

36
задан double-beep 31 January 2019 в 17:24
поделиться