J'ai recherché des variables statiques en C #, mais je ne comprends toujours pas son utilisation. De plus, si j'essaie de déclarer la variable à l'intérieur de la méthode, cela ne me donnera pas l'autorisation de le faire. Pourquoi?
J'ai vu quelques exemples sur les variables statiques. J'ai vu que nous n'avons pas besoin de créer une instance de la classe pour accéder à la variable, mais cela ne suffit pas pour comprendre son utilisation et quand l'utiliser.
Deuxième chose
class Book
{
public static int myInt = 0;
}
public class Exercise
{
static void Main()
{
Book book = new Book();
Console.WriteLine(book.myInt); // Shows error. Why does it show me error?
// Can't I access the static variable
// by making the instance of a class?
Console.ReadKey();
}
}
c#
static
static-variables
Kartik Patel
la source
la source
Book
) no via une instance (book
), donc la solution la plus simple estBook.myInt
.Réponses:
UNE
static
variable en partage la valeur entre toutes les instances de la classe.Exemple sans le déclarer statique:
Explication: Si vous regardez l'exemple ci-dessus, je déclare simplement la
int
variable. Lorsque j'exécute ce code, la sortie sera10
et10
. C'est simple.Regardons maintenant la variable statique ici; Je déclare la variable comme un
static
.Exemple avec variable statique:
Maintenant, lorsque j'exécute le code ci-dessus, la sortie sera
10
et15
. La valeur de la variable statique est donc partagée entre toutes les instances de cette classe.la source
C # n'a pas du tout de variables statiques . Vous pouvez déclarer un champ statique dans la définition de type particulière via C #. Le champ statique est un état, partagé avec toutes les instances d'un type particulier. Par conséquent, la portée du champ statique est de type entier. C'est pourquoi vous ne pouvez pas déclarer de champ statique dans une méthode - la méthode est une portée elle-même et les éléments déclarés dans une méthode doivent être inaccessibles au-dessus de la bordure de la méthode.
la source
les variables statiques sont utilisées lorsqu'une seule copie de la variable est requise. donc si vous déclarez une variable à l'intérieur de la méthode, il n'y a pas d'utilisation d'une telle variable, elle devient locale pour fonctionner uniquement.
exemple de statique est
Les variables déclarées statiques sont généralement partagées entre toutes les instances d'une classe.
Les variables déclarées statiques sont généralement partagées entre toutes les instances d'une classe. Lorsque vous créez plusieurs instances de la classe VariableTest Cette variable permanente est partagée entre toutes. Ainsi, à tout moment donné, il n'y aura qu'une seule valeur de chaîne contenue dans la variable permanente.
Comme il n'y a qu'une seule copie de la variable disponible pour toutes les instances, le code this.permament entraînera des erreurs de compilation car il peut être rappelé que this.variablename fait référence au nom de la variable d'instance. Ainsi, les variables statiques doivent être accédées directement, comme indiqué dans le code.
la source
Quelques exemples "du monde réel" pour les variables statiques:
créer une classe dans laquelle vous pouvez atteindre des valeurs codées en dur pour votre application. Similaire à une énumération, mais avec plus de flexibilité sur le type de données.
Le singleton largement connu, cela permet de contrôler d'avoir exactement une instance d'une classe. Ceci est très utile si vous voulez y accéder dans toute votre application, mais ne pas le transmettre à chaque classe juste pour permettre à cette classe de l'utiliser.
et voici comment vous appelleriez le texturemanager
À propos de votre dernière question: Vous faites référence à l'erreur du compilateur CS0176 . J'ai essayé de trouver plus d'informations à ce sujet, mais je n'ai pu trouver que ce que le msdn avait à dire à ce sujet:
la source
Les variables statiques sont utilisées lorsqu'une seule copie est requise. Laissez-moi vous expliquer cela avec un exemple:
Maintenant, ici, nous avons créé 2 instances pour notre
class
cercle, c'est-à-dire que 2 ensembles de copies_PI
ainsi que d'autres variables sont créés. Donc, disons que si nous avons beaucoup d'instances de cette classe, plusieurs copies de_PI
seront créées en occupant la mémoire. Donc, dans de tels cas, il est préférable de faire aimer ces variables_PI
static
et de les utiliser.Quel que soit le nombre d'instances créées pour le
class
cercle, il n'existe qu'une seule copie de la variable_PI
sauvegardant notre mémoire.la source
Les classes statiques ne vous obligent pas à créer un objet de cette classe / à les instancier, vous pouvez préfixer le mot-clé C # static devant le nom de la classe, pour le rendre statique.
N'oubliez pas: nous n'instancions pas la classe Console, la classe String, la classe Array.
la source
À partir de cet exemple @Kartik Patel, j'ai un peu changé peut-être que maintenant c'est plus clair sur la variable statique
Variable de classe Variable d'instance VS en C #
Membres de classe statiques Variable de classe C # OR
}
https://en.wikipedia.org/wiki/Class_variable
https://en.wikipedia.org/wiki/Instance_variable
https://en.wikipedia.org/wiki/Static_variable
https://javaconceptoftheday.com/class-variables-and-instance-variables-in-java/?fbclid=IwAR1_dtpHzg3bC5WlGQGdgewaTvuOI6cwVeFUtTV8IZuGTj1qH5PmKGwX0yM
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/static-classes-and-static-class-members
Les membres de données et les membres de fonction qui opèrent sur l'instance du type sont appelés membres d'instance. La méthode ToString de int (par exemple) sont des exemples de membres d'instance. Par défaut, les membres sont des membres d'instance. Les membres de données et les membres de fonction qui n'opèrent pas sur l'instance du type, mais plutôt sur le type lui-même, doivent être marqués comme statiques. Les méthodes Test.Main et Console.WriteLine sont des méthodes statiques. La classe Console est en fait une classe statique, ce qui signifie que tous ses membres sont statiques. Vous ne créez jamais réellement d'instances d'une console - une console est partagée sur l'ensemble de l'application.
la source
En réponse à la question "quand l'utiliser?" question:
J'utilise souvent une variable statique (classe) pour attribuer un ID d'instance unique à chaque instance d'une classe. J'utilise le même code dans chaque classe, c'est très simple:
Cela illustre quelques points sur les variables et méthodes statiques:
Je trouve cela utile parce que je développe des applications dans lesquelles des essaims d'objets sont utilisés et qu'il est bon de pouvoir suivre combien ont été créés et de suivre / interroger des instances individuelles.
J'utilise également des variables de classe pour suivre des choses comme les totaux et les moyennes des propriétés des instances qui peuvent être rapportées en temps réel. Je pense que la classe est un bon endroit pour conserver des informations récapitulatives sur toutes les instances de la classe.
la source
Essayez de l'appeler directement avec le nom de la classe
Book.myInt
la source
En comparaison avec les variables de session, les variables statiques auront la même valeur pour tous les utilisateurs considérant que j'utilise une application déployée sur le serveur. Si deux utilisateurs accèdent à la même page d'une application, la variable statique contiendra la dernière valeur et la même valeur sera fournie aux deux utilisateurs contrairement aux variables de session qui sont différentes pour chaque utilisateur. Donc, si vous voulez quelque chose de commun et de même pour tous les utilisateurs, y compris les valeurs qui sont censées être utilisées avec le code de l'application, n'utilisez que statique.
la source
Vous n'avez pas besoin d'instancier un objet, car yau va utiliser une variable statique: Console.WriteLine (Book.myInt);
la source
La variable statique conserve sa valeur précédente jusqu'à la fin du programme. Static est utilisé en appelant directement class_Name.Method () ou class_Name.Property. Aucune référence d'objet n'est nécessaire. L'utilisation la plus courante de statique est la classe Math de C #. Math.Sin (), Math.Cos (), Math.Sqrt ().
la source