Je suis vraiment confus avec la vraie signification du mot-clé statique en C #. J'ai parcouru différents articles sur Internet, mais aucun d'eux ne m'aide vraiment à comprendre son sens et d'autres sources ne sont pas fiables. Je sais que Stack Overflow a des esprits brillants qui peuvent m'aider à comprendre le vrai sens de l'électricité statique comme
En bref, statique signifie effectivement "associé à un type au lieu d'une seule instance du type". Il y a donc un ensemble de variables statiques pour un type (dans un AppDomain), que vous ayez 0 instance ou un million; vous n'avez pas besoin d'une instance pour accéder à un membre statique, etc.
Le point d'initialisation exact des variables statiques dépend de la présence ou non d'un constructeur statique, mais de manière très générale, il s'agit de "une fois, généralement avant que quelque chose d'important ne se produise. dans la classe". (Voir cet article de blog pour une description plus détaillée.)
Alors que les champs readonly
peuvent être statiques ou instance (c'est-à-dire liés au type ou liés à une instance du type), les valeurs const
sont toujours implicitement statique (ce sont des constantes au moment de la compilation, donc cela n'aurait aucun sens d'avoir une copie par instance).
Vous pouvez parfois voir static
être décrit comme "partagé entre toutes les instances d'un type" - Personnellement je n'aime pas cette description, comme elle le suggère qu'il doit y avoir au moins une instance ... alors qu'en réalité, vous n'avez pas besoin d'instances pour utiliser un membre statique. Je préfère les considérer comme entièrement séparés, plutôt que d'être "partagés" entre les instances.
Je peux recommander cet article, il semble assez descriptif: Mot clé statique démystifié
Je recommanderais également un article officiel du Guide de programmation c # qui couvre les diverses utilisations du mot clé statique. Vous pouvez y aller car il existe de nombreux liens vers différents articles MSDN .: Classes statiques et membres de classes statiques (Guide de programmation C #)
Un peu de constante (const) et en lecture seule:
À l'aide d'exemples:
constant:
const int a=10; // value cannot be modified, value is known at compile time
Mais que faire lorsque nous voulons un champ constant dont la valeur n'est pas connue au moment de la compilation?
e.g const PersonClass a=new PersonClass("name"); // error
La réponse est un champ en lecture seule:
readonly:
readonly PersonClass a=new PersonClass("name"); // all correct
De la documentation:
Les initialiseurs de variable de champ statique d'une classe correspondent à une séquence d'affectations qui sont exécutées dans l'ordre textuel dans lequel elles apparaissent dans la déclaration de classe
Les membres statiques sont initialisés lors du premier accès à la classe et sont exécutés dans l'ordre textuel.
Static
méthodes, les propriétés font partie de la classe et non de l'instance.
Static
n'a rien à voir avec readonly
ou constant
. Static
est un moyen comme un membre acessed , readonly
et constant
est bien comme un membre stocké/géré .