L'héritage en C# - Concepts Intermédiaires
Après avoir maîtrisé les bases de l'héritage, nous pouvons introduire des mécanismes de contrôle plus fins pour l'encapsulation et la structure de nos classes.
1. L'Accès protected (Accès hiérarchique)
Le modificateur protected est le juste milieu entre public et private. Il permet aux classes dérivées d'accéder à un membre, tout en le cachant au reste du programme.
C'est très utilisé pour les propriétés dont on veut limiter la modification à la hiérarchie de classes.
classDiagram
class Vehicule {
+«get»#«set» EstEnEtatDeMarche:bool
}
class Voiture {
+SubirAccident() void
}
Vehicule <|-- Voiture
public class Vehicule
{
private bool _estEnEtatDeMarche;
// Tout le monde peut lire (public get), mais seules les classes dérivées peuvent modifier (protected set)
public bool EstEnEtatDeMarche
{
get => _estEnEtatDeMarche;
protected set => _estEnEtatDeMarche = value;
}
// ...
}
public class Voiture : Vehicule
{
public void SubirAccident()
{
EstEnEtatDeMarche = false; // AUTORISÉ : on est dans une classe dérivée.
}
}
// Dans le Program.cs :
// maVoiture.EstEnEtatDeMarche = false; // ERREUR : le "set" est protégé.
2. Le mot-clé sealed (Le Verrou)
sealed (scellé) sert à bloquer l'évolution d'une classe ou d'une méthode. C'est une décision de conception pour dire : "Ceci est la version finale".
classDiagram
class SystemeSecurite {
«sealed»
}
class Camion {
+«redefine»«sealed» Klaxonner() void
}
- Sur une classe : Interdit de créer des classes dérivées à partir d'elle.
- Sur une méthode : Interdit aux classes qui héritent plus bas de redéfinir cette méthode à nouveau.
// Personne ne pourra hériter de cette classe (ex: une classe de sécurité critique)
public sealed class SystemeSecurite
{
// ...
}
public class Camion : Vehicule
{
// Je redéfinis le klaxon, mais je BLOQUE toute redéfinition future pour les camions spéciaux
public sealed override void Klaxonner()
{
Console.WriteLine("POUÊÊÊÊÊT !");
}
}
Résumé des outils intermédiaires
| Mot-clé | Rôle |
|---|---|
protected |
Rendre un membre visible uniquement pour la hiérarchie. |
sealed |
Verrouiller une classe ou une méthode. |
Note : Le concept d'abstraction (modèles obligatoires) sera vu en Semaine 11.