В .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, каждый будет запускать конструкторы классов, и каждый будет содержать отдельные значения для всех статических полей, например.