Classes statiques
Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy — leçon 13 sur 70.
Lorsqu'une classe ne contient que des membres statiques et que vous n'avez jamais besoin d'en créer des instances, vous pouvez déclarer la classe entière comme static. Cela indique au compilateur que la classe ne peut pas être instanciée et ne peut contenir que des membres statiques.
public static class MathHelper
{
public static double Pi = 3.14159;
public static int Square(int number)
{
return number * number;
}
public static int Add(int a, int b)
{
return a + b;
}
}Vous utilisez les classes statiques de la même manière que vous utilisez les membres statiques, en les appelant directement sur le nom de la classe :
int result = MathHelper.Square(5);
double pi = MathHelper.Pi;Les classes statiques ont des restrictions importantes. Vous ne pouvez pas créer d'instance avec new, elles ne peuvent pas avoir de constructeurs d'instance et elles ne peuvent pas être héritées. Elles ne peuvent contenir que des champs, des propriétés et des méthodes statiques.
Les classes Console et Math que vous avez utilisées sont de parfaits exemples de classes statiques. Elles fournissent des fonctionnalités utilitaires sans nécessiter d'état d'objet. Les classes statiques sont idéales pour regrouper des méthodes d'aide ou des constantes liées qui ne nécessitent aucune donnée spécifique à une instance.
Défi
FacileConstruisons un utilitaire de conversion de température en utilisant une classe statique pour regrouper des méthodes d'aide liées qui ne nécessitent aucun état d'objet.
Vous allez créer deux fichiers pour organiser votre code :
TemperatureConverter.cs: Définissez une classe statique appeléeTemperatureConverterdans l'espace de nomsUtilities. Cette classe doit contenir :- Un champ statique
AbsoluteZeroCelsiusdéfini sur-273.15 - Une méthode statique
CelsiusToFahrenheit(double celsius)qui convertit les Celsius en Fahrenheit en utilisant la formule :(celsius * 9 / 5) + 32 - Une méthode statique
FahrenheitToCelsius(double fahrenheit)qui convertit les Fahrenheit en Celsius en utilisant la formule :(fahrenheit - 32) * 5 / 9 - Une méthode statique
IsAboveAbsoluteZero(double celsius)qui retournetruesi la température est supérieure au zéro absolu
- Un champ statique
Program.cs: Dans votre fichier principal, utilisez la classe statique pour effectuer les conversions. Lisez une valeur de température en Celsius depuis l'entrée, puis affichez les conversions et la validation.
Vous recevrez une entrée : une valeur de température en Celsius.
Affichez les résultats dans ce format :
{celsius}C = {fahrenheit}F
{fahrenheit}F = {convertedBack}C
Above Absolute Zero: {True/False}
Absolute Zero: {AbsoluteZeroCelsius}CPar exemple, si l'entrée est 25, la sortie devrait être :
25C = 77F
77F = 25C
Above Absolute Zero: True
Absolute Zero: -273.15CN'oubliez pas que les classes statiques ne peuvent pas être instanciées - vous appellerez toutes les méthodes directement sur le nom de la classe comme TemperatureConverter.CelsiusToFahrenheit(25).
Aide-mémoire
Une classe static ne peut contenir que des membres statiques et ne peut pas être instanciée. Elle est utilisée pour regrouper des méthodes utilitaires et des constantes liées qui ne nécessitent pas d'état d'objet.
public static class MathHelper
{
public static double Pi = 3.14159;
public static int Square(int number)
{
return number * number;
}
public static int Add(int a, int b)
{
return a + b;
}
}Les membres de classe statiques sont accessibles directement via le nom de la classe :
int result = MathHelper.Square(5);
double pi = MathHelper.Pi;Restrictions des classes statiques :
- Ne peut pas être instanciée avec
new - Ne peut pas avoir de constructeurs d'instance
- Ne peut pas être héritée
- Ne peut contenir que des champs, des propriétés et des méthodes statiques
Les exemples courants incluent les classes Console et Math, qui fournissent des fonctionnalités utilitaires sans nécessiter d'état d'objet.
Essayez vous-même
using System;
using Utilities;
class Program
{
public static void Main(string[] args)
{
// Lire la température en Celsius
double celsius = Convert.ToDouble(Console.ReadLine());
// TODO: Utiliser les méthodes statiques de TemperatureConverter pour :
// 1. Convertir celsius en fahrenheit
// 2. Reconvertir fahrenheit en celsius
// 3. Vérifier si la température est au-dessus du zéro absolu
// 4. Obtenir la constante du zéro absolu
// TODO: Imprimer les résultats au format requis :
// {celsius}C = {fahrenheit}F
// {fahrenheit}F = {convertedBack}C
// Above Absolute Zero: {True/False}
// Absolute Zero: {AbsoluteZeroCelsius}C
}
}
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