Почему изменилось поведение BeforeFieldInit в .NET 4? - PullRequest
5 голосов
/ 18 июля 2011

В C # 4 было изменено поведение типов без флага beforefieldinit, поэтому теперь инициализатор типов может вызывать перед первым использованием любое статическое поле класса.

Мои вопросы: почему команда C # / .NET изменила это поведение?В чем основная причина?Можете ли вы показать какой-либо практический пример, где это изменение имеет какой-то смысл?

1 Ответ

12 голосов
/ 18 июля 2011

Поведение всегда было в пределах того, что задокументировано - просто оно изменилось с нетерпеливого на ленивое в .NET 4.

Я подозреваю команде JIT удалось найти способ сделать его ленивым без потери производительности ... или, возможно, это поможет производительности где-то еще. Вероятно, это будет один такое изменение поведения в .NET 4 CLR по сравнению с .NET 2 CLR ... бывает, что я это заметил, но я сомневаюсь, что это сделали многие другие люди. Я думаю, что для команды JIT вполне разумно настроить вещи так, как они считают нужным, в рамках задокументированных гарантий.

В конечном счете, если это приводит к сбою в вашем коде, у вас уже есть ошибка.

...