Давай посчитаем! Перед тем, как переменная используется, она обязательно инициализируется, если разработчик не инициализировал — переменная устанавливается в значение по умолчанию, т.е. для типа int в нуль.
Имеем:
Вы проинициализировали статическую переменную A.x, прибавив к переменной B.y еденицу, т.е
A.x = B.y + 1 = (A.x(здесь переменная равна 0,т.к. еще не инициализирована) + 1) + 1 = (0 + 1) + 1 = 2
А вот интересно здесь то, что при вызове конструктора по умолчанию для класса А и расчета значения переменной х, был автоматически вызван конструктов для класса В, потому как востребовалась переменная у. Сначала посчиталось значение переменной у(оно равно 1), а затем х(равно2).
И все это происходит при вызове метода Console.WriteLine("A.x = " + A.x);
При втором вызове Console.WriteLine происходит просто считывание у.
Хотя я могу и ошибаться, пользовался дебагером, надо ILDAsm-ом