Мне было интересно, когда статическая переменная (в классе) входит в картину (инициализируется)? Это после вызова конструктора экземпляра в первый раз или после загрузки класса? Когда происходит загрузка класса?
Когда инициализация статических переменных в С#?
Ответ 1
О, это сложно. Это зависит от того, установлен ли флаг beforefieldinit
, который, в свою очередь (в С#), зависит от наличия статического конструктора. И хуже; в .NET 4 Я считаю, что поведение изменилось, сделав его более "ленивым", чем раньше.
Честно говоря, я бы не стал кодировать какое-либо конкретное поведение здесь; просто: статические поля будут инициализированы до того, как вы попытаетесь использовать их, если вы используете обычный код для доступа к ним.
Ответ 2
Статические переменные попадают в изображение после соответствующей загрузки класса. Это происходит не после вызова конструктора, потому что вызов конструктора вступает в игру, когда мы используем новый оператор для создания объекта класса, а статические переменные доступны на уровне класса, а не на уровне объекта.
Ответ 3
Это может зависеть от языка программирования и среды, но обычно статические переменные инициализируются при загрузке класса.