Подтвердить что ты не робот

Когда инициализация статических переменных в С#?

Мне было интересно, когда статическая переменная (в классе) входит в картину (инициализируется)? Это после вызова конструктора экземпляра в первый раз или после загрузки класса? Когда происходит загрузка класса?

4b9b3361

Ответ 1

О, это сложно. Это зависит от того, установлен ли флаг beforefieldinit, который, в свою очередь (в С#), зависит от наличия статического конструктора. И хуже; в .NET 4 Я считаю, что поведение изменилось, сделав его более "ленивым", чем раньше.

Честно говоря, я бы не стал кодировать какое-либо конкретное поведение здесь; просто: статические поля будут инициализированы до того, как вы попытаетесь использовать их, если вы используете обычный код для доступа к ним.

У Jon Skeet есть хорошая рецензия на этот здесь и здесь

Ответ 2

Статические переменные попадают в изображение после соответствующей загрузки класса. Это происходит не после вызова конструктора, потому что вызов конструктора вступает в игру, когда мы используем новый оператор для создания объекта класса, а статические переменные доступны на уровне класса, а не на уровне объекта.

Ответ 3

Это может зависеть от языка программирования и среды, но обычно статические переменные инициализируются при загрузке класса.