Comprendre les classes imbriquées C# : Définition, utilisation et héritage
Comprendre les classes imbriquées C#
Explorez comment définir, accéder et hériter des classes imbriquées en C# avec des exemples pratiques démontrant les meilleures pratiques.
En C#, une classe peut être déclarée à l'intérieur d'une autre classe. Le type interne est appelé classe imbriquée. Par exemple :
class ClasseExterne {
// ... membres externes
class ClasseInterne {
// ... membres internes
}
}
Cet exemple crée ClasseInterne à l'intérieur de ClasseExterne. Le type interne n'est visible qu'à l'intérieur du type externe sauf si son modificateur d'accès le permet autrement.
Accès aux membres de classe imbriquée
Pour travailler avec des types imbriqués, vous instanciez d'abord chaque classe séparément.
1. Créer une instance de la classe externe
ClasseExterne externe = new ClasseExterne();
Ici, externe est un objet de ClasseExterne.
2. Créer une instance de la classe imbriquée
ClasseExterne.ClasseInterne interne = new ClasseExterne.ClasseInterne();
Puisque ClasseInterne est imbriquée dans ClasseExterne, vous la qualifiez avec le nom du type externe.
Une fois instanciées, vous pouvez appeler les membres via la référence d'objet.
Exemple : Classe imbriquée avec méthodes
using System;
namespace NestedClassDemo {
public class Voiture {
public void AfficherVoiture() => Console.WriteLine("Voiture : Bugatti");
public class Moteur {
public void AfficherMoteur() => Console.WriteLine("Moteur : Moteur Essence");
}
}
class Program {
static void Main(string[] args) {
Voiture voitureSport = new Voiture();
voitureSport.AfficherVoiture();
Voiture.Moteur moteurEssence = new Voiture.Moteur();
moteurEssence.AfficherMoteur();
Console.ReadLine();
}
}
}
Sortie
Voiture : Bugatti Moteur : Moteur Essence
L'exemple montre comment créer des objets à la fois de l'externe Voiture et de l'imbriquée Moteur et invoquer leurs méthodes.
Notez que vous ne pouvez pas appeler une méthode de type imbriqué directement depuis l'instance externe :
// Invalide
voitureSport.AfficherMoteur();
Accès aux membres de la classe externe depuis une classe imbriquée
Les classes imbriquées peuvent référencer les membres de leur type conteneur. Vous pouvez utiliser une instance du type externe ou le nom du type externe pour les membres statiques.
Utilisation d'une instance pour accéder aux membres d'instance
using System;
namespace NestedClassDemo {
public class Voiture {
public string Marque = "Bugatti";
public class Moteur {
public void AfficherMarque() {
Voiture voiture = new Voiture();
Console.WriteLine("Marque : " + voiture.Marque);
}
}
}
class Program {
static void Main(string[] args) {
Voiture.Moteur moteur = new Voiture.Moteur();
moteur.AfficherMarque();
Console.ReadLine();
}
}
}
Sortie
Marque : Bugatti
Accès aux membres statiques sans instanciation
using System;
namespace NestedClassDemo {
public class Voiture {
public static string Marque = "Bugatti";
public class Moteur {
public void AfficherMarque() {
Console.WriteLine("Marque : " + Voiture.Marque);
}
}
}
class Program {
static void Main(string[] args) {
Voiture.Moteur moteur = new Voiture.Moteur();
moteur.AfficherMarque();
Console.ReadLine();
}
}
}
Sortie
Marque : Bugatti
Héritage impliquant des classes imbriquées
Les classes imbriquées peuvent participer à l'héritage comme n'importe quel autre type.
Dérivation d'une classe depuis une classe externe
using System;
namespace NestedClassDemo {
class Ordinateur {
public void Afficher() => Console.WriteLine("Méthode de la classe Ordinateur");
public class Processeur {
// Membres additionnels peuvent être ajoutés ici
}
}
class Portable : Ordinateur {
// Portable hérite de tous les membres d'Ordinateur
}
class Program {
static void Main(string[] args) {
Portable portable = new Portable();
portable.Afficher();
Console.ReadLine();
}
}
}
Sortie
Méthode de la classe Ordinateur
Dérivation d'une classe depuis une classe imbriquée
using System;
namespace NestedClassDemo {
class Ordinateur {
public class Processeur {
public void Afficher() => Console.WriteLine("Méthode de la classe Processeur");
}
}
class Portable : Ordinateur.Processeur {
// Portable hérite des membres d'Ordinateur.Processeur
}
class Program {
static void Main(string[] args) {
Portable portable = new Portable();
portable.Afficher();
Console.ReadLine();
}
}
}
Sortie
Méthode de la classe Processeur
Quand vous héritez d'une classe imbriquée, vous devez qualifier le type avec son nom de classe externe, par exemple Ordinateur.Processeur.
Langue C
- Classes et objets C# : Fondations pour une POO robuste
- Comprendre les modificateurs d'accès C# : Public, Private, Protected, Internal et plus
- Constructeurs C# : Types, exemples et patterns avancés
- Mot-clé Static C# : Maîtriser les variables, méthodes et classes statiques
- 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
- Maîtriser la surcharge de constructeurs en C#