SUPINFO International University

SUPINFO Institute of Information Technology
Laboratoire Microsoft




Tous les Articles du Laboratoire Microsoft

Présentation du C# (suite et fin)
Accueil > Articles > Développement
Auteurs 
Franklin-jaurès KONGBANG

Etudiant


 Tous les articles de cet auteur

3/5

Assez Bien


179159
141/429

héritage et polymorphisme

L’héritage c’est le fait qu’une classe hérite des membres protégés ou publics d’une autre classe.

Pour une classe B héritant d'une classe A, la syntaxe est 

class A

{

}

class B : A

{

}

 

Soit le programme ci-dessous :

using System;

namespaceheritage

{

      class Class1

      {

             class Maclasse

            {

                  protected string _pays;

                  protected string Ville;

                  public Maclasse(string champ1, string champ2)

                  {

                        this._pays = champ1;

                        this.Ville = champ2;

                  }

                  public void affiche()

                  {

                        Console.WriteLine("pays: {0} , Ville: {1}",_pays,Ville);

                  }

            }

             class Taclasse:Maclasse

            {

                  private int _bp;

                  public Taclasse(string champ1, string champ2, int champ3):base(champ1,champ2)

                  {

                        this._bp = champ3;

                  }

                  public void affiche2()

                  {

                        affiche();

                        Console.WriteLine("B.P: {0}",_bp);

                  }

            [STAThread]

            static void Main(string[] args)

            {

                  Maclasse obj1 = new Maclasse("bresil","brasilia");

                  Taclasse obj2 = new Taclasse("france","paris",75);

                  obj1.affiche();

                  obj2.affiche2();

                  Console.ReadLine();

            }

      }

}  

 

 

 

 

On constate bel et bien que la classe Taclasse a bien hérité des membres et des méthodes de la classe Maclasse. Puisque Taclasse accède aux champs _pays, Ville et aux méthodes Taclasse() et affiche() de la classe Maclasse.

Les membres déclarés protected sont accessibles que dans la classe elle-même et ses classes dérivées. Si les variables _pays et Ville étaient déclarées private, les instances de Taclasse n’auraient jamais eu accès à ces variables. Il en est de même pour les méthodes.

 

 

Polymorphisme

 

C’est le fait qu’une fonction puisse avoir plusieurs définitions.

Reprenons le programme précédent et ajoutons y la méthode ClasseMethode() :

 

using System;

namespace heritage

{

      class Class1

      {

             class Maclasse

            {

                  protected string _pays;

                  protected string Ville;

                  public Maclasse(string champ1, string champ2)

                  {

                        this._pays = champ1;

                        this.Ville = champ2;

                  }

                  public void affiche()

                  {

                        Console.WriteLine("pays: {0} , Ville: {1}",_pays,Ville);

                  }

               

                   public virtual void ClasseMethode()

                   {

                         Console.WriteLine("je suis bien en {0}",_pays);

                   }

            }

             class Taclasse:Maclasse

            {

                  private int _bp;

                  public Taclasse(string champ1, string champ2, int champ3):base(champ1,champ2)

                  {

                        this._bp = champ3;

                  }

                  public void affiche2()

                  {

                        affiche();

                        Console.WriteLine("B.P: {0}",_bp);

                  }

                   public override void ClasseMethode()

                   {

                         Console.WriteLine("je suis bien en {0} et ma boîte postale est bien {1} .",_pays,_bp);

                   }

            }                                             

            [STAThread]

            static void Main(string[] args)

            {

                  Maclasse obj1 = new Maclasse("italie","rome");

                  Taclasse obj2 = new Taclasse("france","paris",75019);

                  Maclasse obj3 = new Taclasse("allemagne","berlin",45010);

                  obj1.affiche();

                  obj1.ClasseMethode();

                  obj2.affiche2();

                  obj2.ClasseMethode();

                  obj3.affiche();

                  obj3.ClasseMethode();

                  Console.ReadLine();

            }

      }

}  

 

 

Le programme exécuté affiche :

 

Le mot clef virtual affecté à la méthode ClasseMethode() dans la classe Maclasse ne change rien pour le déroulement de la méthode dans cette classe. Mais par contre indique plutôt que la méthode sera redéfinie dans une classe dérivée. Dans la classe fille Taclasse, la méthode ClasseMethode() est précédée du mot clef override. Ce dernier précise que c’est une redéfinition de la méthode virtuelle de la classe de base. Le mot clef virtual permet d’appeler la méthode de la classe instanciée. C’est pourquoi lorsque  obj1 et obj2 font appel à ClasseMethode(), on n’a pas les mêmes résultats.

Bien que l’instance obj3 soit de type Maclasse, c’est la méthode ClasseMethode() de la classe Taclasse qui est appelée parce que obj3 est instancié par Taclasse.

   


Sommaire
1. Les collections
2. les structures
3. les classes
4. Les propriétés
5. Les exceptions
6. Héritage et polymorphisme
7. Les interfaces
8. Surcharge d’opérateurs
9. La délégation
10. Les évènements



En Savoir Plus 
Evaluez cet article 


Pour afficher ou poster un commentaire, cliquez sur ce lien : Forum-Microsoft



Retrouvez ci-dessous les autres sections du Laboratoire Microsoft