В .NET статические конструкторы называются при создании нового AppDomain?
Когда я создаю новый AppDomain с помощью AppDomain.CreateDomain
в С#, будут ли вызваны статические конструкторы, поскольку asseblies загружаются внутри вновь созданного AppDomain?
Соответствующие сборки уже загружены в текущий домен.
Ответы
Ответ 1
Нет - статические конструкторы будут вызваны только при первом доступе к статическому члену или созданию экземпляра.
Статический конструктор будет вызываться один раз за AppDomain
, хотя, если это вас беспокоит. Это не похоже на выполнение один раз в другом AppDomain
, типы в новом AppDomain
остаются неинициализированными:)
Обратите внимание, что инициализаторы типа для типов без статических конструкторов могут выполняться раньше или позже, чем те, которые используются для типов со статическими конструкторами, а также для деталей точной реализации .NET 4.
Ответ 2
Проверьте этот сайт: http://codeidol.com/csharp/net-framework/Threads,-AppDomains,-and-Processes/AppDomains/
Вот выдержка:
Если вы не используете что-то вроде поточно-статических полей, каждый AppDomain содержит копию всех статических полей. Все классные (или статические) конструкторы будут запускаться один раз в пределах определенного AppDomain. Это означает, что если вы загружаете одну и ту же сборку в разные AppDomains, каждый будет запускать конструкторы классов, и каждый будет содержать отдельные значения для всех статических полей, например.