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.
Défi
FacileConstruisons 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 classeOrderdans l'espace de nomsOrderSystem. Chaque commande doit avoir une propriété d'instanceOrderId(int) etCustomerName(string). La classe doit également suivre le nombre total de commandes créées à l'aide d'un champ statiqueTotalOrders, et fournir une méthode statiqueGetNextOrderId()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: 2Aide-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}
}
}
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
1Fondamentaux de la POO
Fichiers externesEspaces de noms et directivesIntro aux classes et objetsLe mot-clé 'this'Méthodes et paramètresChamps vs PropriétésConstructeursInitialiseurs d'objetsRécapitulatif - Calculatrice simple4Héritage
Syntaxe de base de l'héritage (:)Le mot-clé 'base'Mots-clés Virtual & OverrideClasses scelléesLa classe de base 'object'Récapitulatif - Hiérarchie des employés7Fonctionnalités avancées
Surcharge d'opérateursIndexeurs (this[])Redéfinition de ToString()Méthodes d'extensionRécapitulatif - Liste personnalisée10Patrons de conception - Partie 1
Introduction aux patrons de conceptionSingleton Thread-SafePatron FabriquePatron Observateur (Événements)Patron Stratégie2Propriétés et membres statiques
Propriétés auto-implémentéesPropriétés en lecture/écriture seuleChamps et méthodes statiquesClasses statiquesMembres à corps d'expression5Polymorphisme & Interfaces
Polymorphisme : Compilation vs ExécutionInterface vs Classe AbstraiteInterfaces MultiplesInterfaces ExplicitesUpcasting & DowncastingRécapitulatif - Calculateur de Formes8Concepts avancés de la POO
Composition plutôt qu'héritageGénériques (Classes et Méthodes)Délégués et ÉvénementsAttributs et RéflexionIDisposable et l'instruction usingBases de l'Injection de Dépendances11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Architecture des classes
Données d'instance vs statiquesMots-clés 'readonly' & 'const'Champs de supportRécapitulatif - Gestionnaire de compte bancaire6Encapsulation
Modificateurs d'accèsPropriétés pour l'encapsulationImplémentation du masquage de donnéesPatterns d'immuabilitéRécapitulatif - Dossiers d'étudiants12Projet : Système de gestion de bibliothèque
Structure du projetModèles Livre et Utilisateur