Когда статические переменные инициализируются в C #? - PullRequest
24 голосов
/ 19 октября 2010

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

Ответы [ 3 ]

31 голосов
/ 19 октября 2010

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

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

У Джона Скита есть хорошая статья об этом здесь и здесь

0 голосов
/ 23 июля 2015

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

0 голосов
/ 19 октября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...