Почему изменение свойства BeforeFieldInit в .NET 4?

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

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

Ответ 1

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

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

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