Mémo Programmation C# : héritage

En C#, tous est objet, la moindre classe de base est implicitement dérivée de la classe « Object ».

L’héritage, (avec l’encapsulation et le polymorphisme), est l’une des trois caractéristiques principales de la programmation orientée objet. Cela permet de créer de nouvelles classes qui réutilisent, étendent et modifient le comportement défini dans d’autres classes.

La classe dont les membres sont hérités porte le nom de classe de base (mère ou parent) et la classe qui hérite de ces membres porte le nom de classe dérivée (fille).

Chaque classe possède des caractéristiques (attributs et méthodes) qui lui sont propres. Lorsqu’une classe dérivée (fille) hérite d’une classe de base (mère), elle peut alors utiliser ses caractéristiques.

Rappel : Pour qu’une classe dérivée (fille) puisse hériter des propriétés de la classe de base, les propriétés de la classe mère doivent posséder des attributs de visibilité compatibles.

  • Public , accessible directement en dehors de la classe
  • Private , accessible uniquement depuis la classe courante
  • Protected , visible par la classe courante, toutes les classes dérivées, mais inaccessible en dehors de celles-ci

Note : L’héritage multiple n’existe pas avec C#, cependant, l’utilisation d’interface contournera le problème…

Exemple :

Main

class Sprite{ //parent class
     Vector2 position;
     Texture2D texture;
     public Sprite(Vector2 position){
          this.position = position;
     }

     public void LoadContent(ContentManager content, String asset){
          this.texture = content.Load<Texture2D>(assetName);
     }
}

class Human{ //child class
     String name = "NoName";
     int health = 0;

     public Human(Vector2 position, String name, int health):base(position){
     //base(position) spécifie quel constructeur de classe de base devrait être appelé  
     //lors de la création d'instance de la classe dérivée
         this.name = name;
         this.health = health;
     }
}

Notes:

Le mot clé base fait référence à la classe de base (mère).

Le mot-clé override indique que la méthode de la classe de base (mère) est réecrite par la classe dérivée (fille).

//in the child class
public override void Init(){
     base.Init();
}

Le mot clé sealed empêchera les autres classes d’hériter d’elle (ou de l’un de ses membres).

public sealed class MyClassSealed
{
    // ...
}

//or just one of these members
public class MyClass
{
    public sealed void MySealedFunction() { 
         // ...
    }
}

Rappel :

class MyParentClass{ ... }
class MyChildClass : MyParentClass { ... }

MyParentClass parent = new MyParentClass(); //un objet de la classe MyParentClass est créé

MyChildClass child = new MyChildClass(); //un objet de la classe MyChildClass est créé

MyParentClass child = new MyChildClass(); //child est un objet de la class MyChildClass 
//puisqu'un objet d'une classe dérivée est aussi un objet de sa classe de base

Et voilà pour mon 1er p’tit mémo de programmation !