2010-08-13 3 views
15

Lorsque je crée un nouvel AppDomain à l'aide de AppDomain.CreateDomain en C#, les constructeurs statiques seront-ils appelés comme asseblies sont chargés dans le AppDomain nouvellement créé?Dans .NET, les constructeurs statiques sont-ils appelés lorsqu'un nouvel AppDomain est créé?

Les assemblages en question ont déjà été chargés dans le domaine en cours.

+0

Bonne question. En fait, les agents statiques ne sont pas appelés avant d'instancier un objet de la classe, et non lorsque l'assembly est chargé. –

+0

@jdv: Ou si vous accédez à un membre statique ... –

Répondre

20

Non Les constructeurs statiques ne seront appelés que la première fois qu'un membre statique est accédé ou qu'une instance est créée.

Le constructeur statique sera invoqué une seule fois par AppDomain, si c'est ce qui vous préoccupait. Il est comme ne pas avoir exécuté une fois dans un AppDomain différent, les types dans la nouvelle AppDomain se laisser uninitialized :)

Notez ce type initialisations pour les types sans constructeurs statiques peuvent être exécutés plus tôt ou plus tard que ceux pour les types avec constructeurs statiques, et les détails de mise en œuvre précise changed for .NET 4.

+0

Ce lien vers les modifications pour .NET 4 est mauvais –

+0

@ joseph.l.hunsaker: Fixe, merci. –

4

Vérifiez ce site: http://codeidol.com/csharp/net-framework/Threads,-AppDomains,-and-Processes/AppDomains/

Voici un extrait:

Sauf si vous utilisez quelque chose comme des champs de fil statique, chaque AppDomain contient une copie de tous les champs statiques. Tous les constructeurs de classes (ou statiques) s'exécuteront une fois dans un AppDomain donné. Cela signifie que si vous chargez le même assembly dans différents AppDomains, chacun exécutera les constructeurs de classe, et chacun contiendra des valeurs séparées pour tous les champs statiques, par exemple.

Questions connexes