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#?
Répondre
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.
+1 pour "Je ne voudrais pas code à tout comportement spécifique ", conseils judicieux – smirkingman
Que couvre le" code normal "? –
@DaviddCeFreitas "trucs qui ne sont pas la réflexion" (et autres astuces) –
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.
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.
- 1. C++: Variables non initialisées garbage
- 2. Quelles sont les variables initialisées en Delphi?
- 3. Variables statiques en C et C++
- 4. Variables statiques C++ dynamiques
- 5. ASP.NET C# Les variables statiques sont globales?
- 6. Quand les variables statiques de servlet gced dans gae?
- 7. variables statiques dans les méthodes Objective-C
- 8. Les variables statiques ASP.NET restent quand j'arrête mon application!
- 9. variables de membre mutables statiques en C++?
- 10. Quand les données d'espace de noms anonymes sont-elles initialisées?
- 11. C: Global, variables statiques compréhension
- 12. Asp.Net/C# persistance des variables statiques
- 13. Variables non initialisées dans Fortran 2003
- 14. Comment déclarer deux variables statiques différentes? (C++)
- 15. Variables membres statiques de la même classe en C++
- 16. Variables statiques dans l'API Python C
- 17. variables et fonctions statiques
- 18. Variables statiques dans R
- 19. variables statiques/globales dans la bibliothèque partagée en langage C
- 20. Pourquoi les variables initialisées dans viewDidLoad ne conservent-elles pas de valeur dans Objective-C?
- 21. Initialisation des variables statiques de la fonction
- 22. Rendre les variables statiques globales multithread safe
- 23. Objectif C - Où gérez-vous les variables statiques globales?
- 24. Variables statiques, compilation séparée
- 25. Comment déclarer des variables statiques en Objective-C?
- 26. variables de chaîne const statiques globales en Objective-C
- 27. Accéder aux variables de classes statiques en C++?
- 28. variables statiques dans ruby
- 29. aide avec des variables statiques en Java
- 30. Ordre d'initialisation des variables statiques
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). –
@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) –