Re[3]: [Этюд] Минутка WTF
От: Pro100Oleh Украина  
Дата: 29.03.16 20:45
Оценка: 44 (1)
Здравствуйте, Sinix, Вы писали:

S>…но тут есть один нюанс:

S>

S>Current versions of the CLR do not do this, but future versions might.


Ладно, зайдем с другой стороны. Добавляем:
        static Program()
        {
            Console.WriteLine(falseRO);
        }

... и ничего не меняется. Но меняем на:
        static Program()
        {
            Console.WriteLine(CaseB());
        }

... и вуаля:

B: Not set
A: Not set
B: Not set
C: Not set

A/B/C set? False, True, True

A: Not set
B: Set
C: Set
Done


Учитывая что MSIL методов никак не меняется, значит прикол в JIT. Самое простое объяснение — если при компиляции MSIL -> native статик конструктор уже выполнялся, то readonly поля можно заметить их значением.
Угадал?
Pro
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.