Это правильно.
Ваши статические инициализаторы, затем статический конструктор запускается перед вашим стандартным конструктором, но когда он запускается, он использует новую A (), поэтому проходит через ваш нестатический путь конструктора. Это вызывает сообщения, которые вы видите.
Вот полный путь выполнения:
Когда вы впервые вызываете var a = new A();
в своей программе, это первый раз, когда осуществляется доступ к A.
Это вызовет статическую инициализацию A._A
На этом этапе A._A строит с _A = (new A()).I();
Это хиты
Console.WriteLine("new A()");
if (_A == null)
Console.WriteLine("_A == null");
с тех пор _A не было установлено с возвращенным составным типом (пока).
Далее запускается статический конструктор A { static A(); }
. Это печатает сообщение «static A ()».
Наконец, ваше исходное утверждение (var a = new A();
) выполнено, но на этом этапе статика построена, поэтому вы получите окончательный отпечаток.