static (Référence C#)
Mise à jour : novembre 2007
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 il ne peut pas être utilisé avec des indexeurs, des destructeurs ou des types autres que des classes. Pour plus d'informations, consultez Classes statiques et membres de classe statique (Guide de programmation C#).
Exemple
La classe suivante est déclarée comme static et contient uniquement des méthodes static :
static class CompanyEmployee
{
public static void DoSomething() { /*...*/ }
public static void DoSomethingElse() { /*...*/ }
}
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 et 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 Static (C++). |
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.
Dans 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é et 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.
public class Employee4
{
public string id;
public string name;
public Employee4()
{
}
public Employee4(string name, string id)
{
this.name = name;
this.id = id;
}
public static int employeeCounter;
public static int AddEmployee()
{
return ++employeeCounter;
}
}
class MainClass : Employee4
{
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:
Employee4 e = new Employee4(name, id);
Console.Write("Enter the current number of employees: ");
string n = Console.ReadLine();
Employee4.employeeCounter = Int32.Parse(n);
Employee4.AddEmployee();
// Display the new information:
Console.WriteLine("Name: {0}", e.name);
Console.WriteLine("ID: {0}", e.id);
Console.WriteLine("New Number of Employees: {0}",
Employee4.employeeCounter);
}
}
/*
Input:
Matthias Berndt
AF643G
15
Sample Output:
Enter the employee's name: Matthias Berndt
Enter the employee's ID: AF643G
Enter the current number of employees: 15
Name: Matthias Berndt
ID: AF643G
New Number of Employees: 16
*/
Cet exemple montre que, bien qu'il soit possible d'initialiser un champ statique à l'aide d'un autre champ statique non encore déclaré, les résultats seront indéfinis jusqu'à vous affectiez explicitement une valeur au champ statique.
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);
}
}
/*
Output:
0
5
99
*/
Spécification du langage C#
Pour plus d'informations, consultez les sections suivantes dans Spécifications du langage C#.
1.6.6.3 Méthodes statiques et méthodes d'instance
5.1.1 Variables statiques
10.3.7 Membres statiques et d'instance
10.5.1 Champs statiques et d'instance
10.5.5.1 Initialisation de champ statique
10.6.2 Méthodes statiques et d'instance
10.7.1 Propriétés statiques et d'instance
10.8.3 Événements statiques et d'instance
10.12 Constructeurs statiques
Voir aussi
Concepts
Référence
Classes statiques et membres de classe statique (Guide de programmation C#)