Utilisez le modificateur static pour déclarer un membre statique, qui appartient au type lui-même plutôt qu'à un objet spécifique. Le modificateur static peut être utilisé avec des classes, champs, méthodes, propriétés, opérateurs, événements et constructeurs, mais ne peut pas être utilisé avec des indexeurs, des destructeurs ou des types autres que des classes. Par exemple, la classe suivante est déclarée comme static et contient uniquement des méthodes static :
static class CompanyEmployee
{
public static string GetCompanyName(string name) { ... }
public static string GetCompanyAddress(string address) { ... }
}Pour plus d'informations, consultez Classes statiques et membres de classe statique (guide de programmation C#).
Notes-
Une déclaration de constante ou de type est de manière implicite un membre statique.
-
Un membre statique ne peut pas être référencé par le biais d'une instance. À la place, il est référencé à l'aide du nom de type. Par exemple, considérons la classe suivante :
public class MyBaseC { public struct MyStruct { public static int x = 100; } }Pour faire référence au membre statique x, utilisez le nom complet (à moins qu'il soit accessible à partir de la même portée) :
MyBaseC.MyStruct.x
-
Alors qu'une instance de classe contient une copie distincte de tous les champs d'instances de la classe, il existe une seule copie de chaque champ statique.
-
Il est impossible d'utiliser this pour référencer des méthodes statiques ou des accesseurs de propriétés.
-
Si le mot clé static est appliqué à une classe, tous les membres de la classe doivent être statiques.
-
Les classes, y compris les classes statiques, peuvent avoir des constructeurs statiques. Les constructeurs statiques sont appelés à un moment donné situé entre le début du programme et l'instanciation de la classe.
Remarque L'utilisation du mot clé static est plus limitée qu'en C++. Pour comparer avec le mot clé en C++, consultez statique.
Pour illustrer les membres statiques, considérez une classe qui représente un employé d'une entreprise. Partez de l'hypothèse que la classe contient une méthode permettant de compter les employés et un champ pour stocker le nombre d'employés. La méthode et le champ n'appartiennent à aucun employé d'instance. À la place, ils appartiennent à la classe de l'entreprise. En conséquence, ils doivent être déclarés comme membres statiques de la classe.
ExempleDans cet exemple, le code lit le nom et l'identificateur d'un nouvel employé, incrémente d'une unité le compteur d'employés et affiche les informations concernant le nouvel employé, ainsi que le nouveau nombre d'employés. Par souci de simplicité, ce programme lit le nombre actuel d'employés à partir du clavier. Dans une application réelle, cette information doit être lue à partir d'un fichier.
// cs_static_keyword.cs
using System;
public class Employee
{
public string id;
public string name;
public Employee()
{
}
public Employee(string name, string id)
{
this.name = name;
this.id = id;
}
public static int employeeCounter;
public static int AddEmployee()
{
return ++employeeCounter;
}
}
class MainClass : Employee
{
static void Main()
{
Console.Write("Enter the employee's name: ");
string name = Console.ReadLine();
Console.Write("Enter the employee's ID: ");
string id = Console.ReadLine();
// Create and configure the employee object:
Employee e = new Employee(name, id);
Console.Write("Enter the current number of employees: ");
string n = Console.ReadLine();
Employee.employeeCounter = Int32.Parse(n);
Employee.AddEmployee();
// Display the new information:
Console.WriteLine("Name: {0}", e.name);
Console.WriteLine("ID: {0}", e.id);
Console.WriteLine("New Number of Employees: {0}",
Employee.employeeCounter);
}
}Entrée
Tara Strahan AF643G 15
Résultat de l'exemple
Enter the employee's name: Tara Strahan Enter the employee's ID: AF643G Enter the current number of employees: 15 Name: Tara Strahan ID: AF643G New Number of Employees: 16
Cet exemple montre que, bien qu'il soit possible d'initialiser un champ statique avec un autre champ statique non encore déclaré, les résultats seront indéfinis jusqu'à vous affectiez explicitement une valeur au champ statique.
// cs_static_keyword_2.cs
using System;
class Test
{
static int x = y;
static int y = 5;
static void Main()
{
Console.WriteLine(Test.x);
Console.WriteLine(Test.y);
Test.x = 99;
Console.WriteLine(Test.x);
}
}Sortie
0 5 99
Spécification du langage C#Pour plus d'informations, consultez les sections suivantes dans Spécifications du langage C#.
-
1.6.5.3 Méthodes statiques et méthodes d'instance
-
5.1.1 Variables statiques
-
10.2.5 Membres statiques et d'instance
-
10.4.1 Champs statiques et d'instance
-
10.4.5.1 Initialisation de champ statique
-
10.5.2 Méthodes statiques et d'instance
-
10.6.1 Propriétés statiques et d'instance
-
10.7.3 Événements statiques et d'instance
-
10.11 Constructeurs statiques
Outils (masquer)