2010-10-19 12 views
18

Je me demandais quand une variable statique (dans une classe) entre en image (initialisée)? Est-ce après que le constructeur de l'instance a été appelé pour la première fois ou après le chargement de la classe? Quand un chargement de classe se produit-il?Quand les variables statiques sont-elles initialisées en C#?

+0

Ceci est abordé dans plusieurs questions, notamment [Comment l'initialisation de champ statique fonctionne-t-elle en C#? ] (http://stackoverflow.com/questions/710793/how-does-static-field-initialization-work-in-c) et [Quelle est l'ordre d'initialisation de la variable statique en C#? ] (http://stackoverflow.com/questions/1405709/what-is-the-static-variable-initialization-order-in-c). –

+1

@Matthew - de bons liens, mais avec CLI 4 ils peuvent être faux - ou plutôt: pas * tout à fait * aussi complet; [voir ici] (http://msmvps.com/blogs/jon_skeet/archive/2010/01/26/type-initialization-changes-in-net-4-0.aspx) –

Répondre

25

Oh, c'est complexe. Cela dépend si le drapeau beforefieldinit est défini, ce qui à son tour (en C#) dépend s'il existe un constructeur statique. Et pire; dans .NET 4 Je crois le comportement a changé pour le rendre plus "paresseux" qu'il était. Franchement, je ne coderais aucun comportement spécifique ici; simplement: les champs statiques seront initialisés avant d'essayer de les utiliser, tant que vous utilisez du code normal pour y accéder.

Jon Skeet a une bonne écriture sur ce here et here

+2

+1 pour "Je ne voudrais pas code à tout comportement spécifique ", conseils judicieux – smirkingman

+1

Que couvre le" code normal "? –

+1

@DaviddCeFreitas "trucs qui ne sont pas la réflexion" (et autres astuces) –

-6

Cela peut dépendre du langage de programmation et de l'environnement, mais les variables statiques sont généralement initialisées lors du chargement de la classe.

0

Les variables statiques entre en image après le chargement de la classe correspondante. Ce n'est pas après l'appel du constructeur, car l'appel du constructeur entre en jeu lorsque nous utilisons un nouvel opérateur pour créer un objet de classe et les variables statiques sont disponibles au niveau de la classe et non au niveau de l'objet.

Questions connexes