Menu
Coddy logo textTech

Champs et méthodes statiques

Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy — leçon 12 sur 70.

Jusqu'à présent, chaque champ et chaque méthode que nous avons créés appartiennent à des objets individuels. Mais parfois, vous avez besoin de données ou d'un comportement qui appartient à la classe elle-même, partagé entre toutes les instances. C'est là que le mot-clé static intervient.

Un champ statique est partagé par tous les objets d'une classe. Il n'en existe qu'une seule copie, quel que soit le nombre d'instances que vous créez :

public class Player
{
    public static int TotalPlayers = 0;
    public string Name { get; set; }
    
    public Player(string name)
    {
        Name = name;
        TotalPlayers++;
    }
}

Chaque fois qu'un nouveau Player est créé, TotalPlayers augmente. Tous les joueurs partagent ce même compteur.

Une méthode statique appartient à la classe et peut être appelée sans créer d'objet :

public class Calculator
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

// Appelé sur la classe, pas sur une instance
int result = Calculator.Add(5, 3);

Remarquez que vous accédez aux membres statiques en utilisant le nom de la classe, et non une référence d'objet. Les méthodes statiques ne peuvent pas accéder aux champs d'instance ni utiliser this, car elles n'appartiennent à aucun objet spécifique.

Vous avez déjà utilisé des membres statiques sans vous en rendre compte. Console.WriteLine() est une méthode statique, et Math.PI est un champ statique.

challenge icon

Défi

Facile

Construisons un système de suivi des commandes qui utilise des membres statiques pour garder une trace de toutes les commandes passées dans votre application.

Vous allez créer deux fichiers pour organiser votre code :

  • Order.cs : Définissez une classe Order dans l'espace de noms OrderSystem. Chaque commande doit avoir une propriété d'instance OrderId (int) et CustomerName (string). La classe doit également suivre le nombre total de commandes créées à l'aide d'un champ statique TotalOrders, et fournir une méthode statique GetNextOrderId() qui renvoie le prochain ID de commande disponible (en commençant par 1). Le constructeur doit accepter un nom de client, attribuer automatiquement l'ID de la commande à l'aide de la méthode statique et incrémenter le compteur total des commandes.
  • Program.cs : Dans votre fichier principal, créez des commandes basées sur les entrées et affichez leurs détails ainsi que le nombre total de commandes.

Vous recevrez deux entrées représentant les noms des clients pour deux commandes distinctes.

Pour chaque commande, affichez ses détails dans ce format :

Order #{OrderId} - Customer: {CustomerName}

Après avoir créé les deux commandes, affichez le compte total :

Total Orders: {TotalOrders}

Par exemple, si les entrées sont Alice et Bob, la sortie devrait être :

Order #1 - Customer: Alice
Order #2 - Customer: Bob
Total Orders: 2

Aide-mémoire

Le mot-clé static crée des membres qui appartiennent à la classe elle-même plutôt qu'aux instances individuelles.

Les champs statiques sont partagés entre tous les objets d'une classe. Une seule copie existe, quel que soit le nombre d'instances créées :

public class Player
{
    public static int TotalPlayers = 0;
    public string Name { get; set; }
    
    public Player(string name)
    {
        Name = name;
        TotalPlayers++;
    }
}

Les méthodes statiques appartiennent à la classe et peuvent être appelées sans créer d'objet :

public class Calculator
{
    public static int Add(int a, int b)
    {
        return a + b;
    }
}

// Appelé sur la classe, pas sur une instance
int result = Calculator.Add(5, 3);

Les membres statiques sont accédés en utilisant le nom de la classe, et non une référence d'objet. Les méthodes statiques ne peuvent pas accéder aux champs d'instance ni utiliser this puisqu'elles n'appartiennent à aucun objet spécifique.

Les exemples courants de membres statiques incluent Console.WriteLine() (méthode statique) et Math.PI (champ statique).

Essayez vous-même

using System;
using OrderSystem;

class Program
{
    public static void Main(string[] args)
    {
        // Lire les noms des clients
        string customer1 = Console.ReadLine();
        string customer2 = Console.ReadLine();

        // TODO: Créer deux objets Order avec les noms des clients

        // TODO: Afficher les détails de chaque commande au format :
        // Order #{OrderId} - Customer: {CustomerName}

        // TODO: Afficher le nombre total de commandes au format :
        // Total Orders: {TotalOrders}
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet