2010-08-13 14 views
15

Cuando creo un nuevo dominio de aplicación usando AppDomain.CreateDomain en C#, ¿se llamarán los constructores estáticos cuando se carguen asseblies dentro del AppDomain recién creado?En .NET, ¿se llaman constructores estáticos cuando se crea un nuevo dominio de aplicación?

Los conjuntos en cuestión ya se han cargado en el dominio actual.

+0

Buena pregunta. En realidad, los ctors estáticos no se invocan hasta que crea una instancia de un objeto de la clase, no cuando se carga el conjunto. –

+0

@jdv: O si accede a un miembro estático ... –

Respuesta

20

No, los constructores estáticos solo se llamarán la primera vez que se accede a un miembro estático o se crea una instancia.

El constructor estático será invocado una vez por AppDomain, si eso es lo que le preocupa. No es como haber ejecutado una vez en una diferente AppDomain, los tipos en el nuevo AppDomain se quedan sin inicializar :)

en cuenta que inicializadores de tipo para tipos sin constructores estáticos pueden ser ejecutadas antes o después de los de tipos con constructores estáticos, y los detalles de implementación precisos changed for .NET 4.

+0

Ese enlace a los cambios para .NET 4 es malo –

+0

@ joseph.l.hunsaker: Corregido, gracias. –

4

Comprobar este sitio: http://codeidol.com/csharp/net-framework/Threads,-AppDomains,-and-Processes/AppDomains/

He aquí un extracto:

A menos que utilice algo así como campos de rosca-estática, cada dominio de aplicación contiene una copia de todos los campos estáticos. Todos los constructores de clase (o estáticos) se ejecutarán una vez dentro de un Dominio de aplicación determinado. Esto significa que si carga el mismo ensamblado en diferentes AppDomains, cada uno ejecutará los constructores de clase, y cada uno contendrá valores separados para todos los campos estáticos, por ejemplo.

Cuestiones relacionadas