Mot-clé Static C# : Maîtriser les variables, méthodes et classes statiques
Mot-clé Static C#
Ce guide explique le mot-clé static en C#, couvrant les variables statiques, méthodes et classes avec des exemples clairs et concrets.
En C#, appliquer le mot-clé static à un membre crée une instance unique partagée pour tous les objets de ce type. Au lieu que chaque instance détienne sa propre copie, le membre statique vit une fois par type.
Variables statiques en C#
Quand un champ est déclaré static, vous pouvez y accéder directement via le nom de la classe, sans créer d'objet.
using System;
namespace StaticKeyword {
class Etudiant {
// variable statique partagée par tous les étudiants
public static string departement = "Informatique";
}
class Program {
static void Main(string[] args) {
// Accéder au champ statique via le nom de la classe
Console.WriteLine("Département : " + Etudiant.departement);
Console.ReadLine();
}
}
}
Sortie
Département : Informatique
Le champ departement est partagé par chaque instance Etudiant, donc nous le référençons comme Etudiant.departement.
Variables statiques vs variables d'instance
Les variables d'instance appartiennent aux objets individuels, chacun avec sa propre copie. Par exemple :
class Etudiant {
public string nomEtudiant;
}
class Program {
static void Main(string[] args) {
Etudiant s1 = new Etudiant();
Etudiant s2 = new Etudiant();
}
}
Ici, s1 et s2 ont des champs nomEtudiant séparés. En contraste, un champ statique est commun à toutes les instances et peut être accédé sans créer d'objet.
Exemple : Variables statiques vs d'instance
using System;
namespace StaticKeyword {
class Etudiant {
public static string nomEcole = "École Programiz"; // partagé
public string nomEtudiant; // unique
}
class Program {
static void Main(string[] args) {
Etudiant s1 = new Etudiant();
s1.nomEtudiant = "Ram";
Console.WriteLine("Nom : " + s1.nomEtudiant); // instance
Console.WriteLine("École : " + Etudiant.nomEcole); // statique
Etudiant s2 = new Etudiant();
s2.nomEtudiant = "Shyam";
Console.WriteLine("Nom : " + s2.nomEtudiant);
Console.WriteLine("École : " + Etudiant.nomEcole);
Console.ReadLine();
}
}
}
Sortie
Nom : Ram École : École Programiz Nom : Shyam École : École Programiz
Le champ statique nomEcole est identique pour tous les étudiants, le rendant efficace en mémoire et logiquement cohérent.
Méthodes statiques en C#
Les méthodes statiques sont invoquées sur la classe elle-même, pas sur une instance. Elles ne peuvent accéder qu'aux autres membres statiques.
class Test {
public static void Afficher() {
// implémentation
}
}
class Program {
static void Main(string[] args) {
Test.Afficher();
}
}
Tous les objets de Test partagent la même méthode Afficher, donc vous l'appelez via le nom de la classe.
Exemple : Méthodes statiques et non-statiques
using System;
namespace StaticKeyword {
class Test {
public void Afficher1() {
Console.WriteLine("Méthode non statique");
}
public static void Afficher2() {
Console.WriteLine("Méthode statique");
}
}
class Program {
static void Main(string[] args) {
Test t1 = new Test();
t1.Afficher1(); // appel d'instance
Test.Afficher2(); // appel statique
Console.ReadLine();
}
}
}
Sortie
Méthode non statique Méthode statique
Note : La méthode Main elle-même est statique, lui permettant de s'exécuter sans instance.
Classes statiques
Une classe statique ne peut pas être instanciée et ne peut contenir que des membres statiques. Elle est utile pour regrouper des méthodes d'aide.
using System;
namespace StaticKeyword {
static class Test {
static int a = 5;
static void Afficher() {
Console.WriteLine("Méthode statique");
}
static void Main(string[] args) {
// Test t1 = new Test(); // ❌ Erreur de compilation
Console.WriteLine(a);
Afficher();
}
}
}
Tenter d'instancier Test résulte en erreurs de compilation CS0723 et CS0712, confirmant sa nature statique.
Les classes statiques ne peuvent pas être héritées. Par exemple :
static class A { /* ... */ }
// class B : A { /* ... */ } // ❌ Erreur
Accès aux membres statiques à l'intérieur de la classe
Dans la même classe, vous pouvez référencer les champs et méthodes statiques directement, sans le qualificateur de classe.
using System;
namespace StaticKeyword {
class Test {
static int age = 25;
public static void Afficher() {
Console.WriteLine("Méthode statique");
}
static void Main(string[] args) {
Console.WriteLine(age); // accès direct
Afficher(); // accès direct
Console.ReadLine();
}
}
}
Sortie
25 Méthode statique
Ici, age et Afficher sont utilisés sans les préfixer avec Test..
Langue C
- Classes et objets C# : Fondations pour une POO robuste
- Comprendre les modificateurs d'accès C# : Public, Private, Protected, Internal et plus
- Maîtriser le mot-clé this en C#
- Maîtriser les classes et méthodes abstraites C# : Guide pratique
- Comprendre les classes imbriquées C# : Définition, utilisation et héritage
- Comprendre les classes et méthodes partielles C#
- Maîtriser les classes et méthodes sealed en C# : Quand les utiliser, exemples clairs et sécurité du code
- Java Static Expliqué : Variables, Méthodes et Blocs – Exemples Pratiques
- Comprendre le polymorphisme en C++ : Guide pratique