Le mot-clé 'base'
Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy — leçon 20 sur 70.
Lorsqu'une classe dérivée hérite d'une classe de base, vous avez souvent besoin d'accéder directement aux membres du parent. Le mot-clé base fournit cette connexion, vous permettant d'appeler le constructeur de la classe de base ou d'accéder à ses méthodes et propriétés.
L'utilisation la plus courante de base est d'appeler le constructeur de la classe parente. Lors de la création d'un objet dérivé, vous pouvez transmettre des valeurs à la classe de base :
public class Animal
{
public string Name { get; set; }
public Animal(string name)
{
Name = name;
}
}
public class Dog : Animal
{
public string Breed { get; set; }
public Dog(string name, string breed) : base(name)
{
Breed = breed;
}
}La syntaxe : base(name) appelle le constructeur Animal avant que le corps du constructeur Dog ne s'exécute. Cela garantit que la classe de base est correctement initialisée en premier.
Vous pouvez également utiliser base pour appeler des méthodes parentes à partir de la classe dérivée :
public class Animal
{
public void Speak()
{
Console.WriteLine("Animal sound");
}
}
public class Dog : Animal
{
public void Speak()
{
base.Speak(); // Appelle la méthode Speak de Animal
Console.WriteLine("Woof!");
}
}Ici, base.Speak() appelle explicitement la version parente de la méthode. C'est utile lorsque vous souhaitez étendre le comportement du parent plutôt que de le remplacer complètement.
Défi
FacileConstruisons un système d'inventaire de produits qui démontre comment les classes dérivées utilisent le mot-clé base pour initialiser correctement leur classe parente et étendre le comportement hérité.
Vous allez créer trois fichiers pour organiser votre code :
Product.cs: Définissez une classeProductdans l'espace de nomsInventory. Cette classe de base représente n'importe quel produit avec une propriétéName(string) et une propriétéPrice(decimal). Incluez un constructeur qui accepte les deux valeurs et une méthodeGetInfo()qui retourne"{Name}: ${Price}".ElectronicProduct.cs: Définissez une classeElectronicProductdans l'espace de nomsInventoryqui hérite deProduct. Cette classe ajoute une propriétéWarrantyMonths(int). Le constructeur doit accepter le nom, le prix et les mois de garantie - utilisezbasepour passer le nom et le prix au constructeur parent. Créez une méthodeGetInfo()qui appelle d'abord leGetInfo()du parent en utilisantbase, puis ajoute" (Warranty: {WarrantyMonths} months)"pour étendre la sortie.Program.cs: Dans votre fichier principal, créez unElectronicProducten utilisant les valeurs d'entrée et affichez ses informations complètes en appelantGetInfo().
Vous recevrez trois entrées :
- Nom du produit
- Prix
- Mois de garantie
Affichez le résultat de l'appel à GetInfo() sur votre produit électronique.
Par exemple, si les entrées sont Laptop, 999.99, et 24, la sortie devrait être :
Laptop: $999.99 (Warranty: 24 months)Remarquez comment la classe dérivée s'appuie sur la sortie de la classe de base plutôt que de dupliquer la logique. Le mot-clé base vous permet de réutiliser et d'étendre le comportement du parent de manière transparente !
Aide-mémoire
Le mot-clé base permet à une classe dérivée d'accéder aux membres de sa classe parente.
Utilisez base pour appeler le constructeur de la classe parente :
public class Animal
{
public string Name { get; set; }
public Animal(string name)
{
Name = name;
}
}
public class Dog : Animal
{
public string Breed { get; set; }
public Dog(string name, string breed) : base(name)
{
Breed = breed;
}
}La syntaxe : base(name) appelle le constructeur parent avant l'exécution du corps du constructeur de la classe dérivée, garantissant une initialisation correcte.
Utilisez base pour appeler des méthodes parentes à partir de la classe dérivée :
public class Animal
{
public void Speak()
{
Console.WriteLine("Animal sound");
}
}
public class Dog : Animal
{
public void Speak()
{
base.Speak(); // Appelle le Speak de Animal
Console.WriteLine("Woof!");
}
}Cela vous permet d'étendre le comportement parent plutôt que de le remplacer complètement.
Essayez vous-même
using System;
using Inventory;
class Program
{
public static void Main(string[] args)
{
// Lire les entrées
string name = Console.ReadLine();
decimal price = Convert.ToDecimal(Console.ReadLine());
int warrantyMonths = Convert.ToInt32(Console.ReadLine());
// TODO: Créer un ElectronicProduct avec les valeurs d'entrée
// TODO: Afficher le résultat de l'appel à GetInfo() sur votre produit électronique
}
}
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