RunUO-FR

Forum de support pour RunUO en français.
 
AccueilAccueil  FAQFAQ  RechercherRechercher  MembresMembres  GroupesGroupes  S'enregistrerS'enregistrer  Connexion  

Partagez
 

 Héritage, virtual/override, base

Aller en bas 
AuteurMessage
Gargouille



Messages : 97
Date d'inscription : 02/09/2008

Héritage, virtual/override, base Empty
MessageSujet: Héritage, virtual/override, base   Héritage, virtual/override, base Icon_minipostedDim 7 Sep - 23:37


  • L'objet par défaut de C# est la classe object.
  • Toutes les classes créées par la suite hériteront de la classe objetc.
  • Donc toutes les classes pourront être castées en object



  • Soit une classe MaClasse définissant une variable nommée var
    Code:
    public MaClasse
    {
      public int var;
    }
  • Soit une classe MaClasse2 héritant de MaClasse
    Code:
    public MaClasse2 : MaClasse
    {
    }
  • MaClasse2 hérite de var, donc, dans un code de MaClasse2, le code suivant serait valable:
    Code:
    var=10;
  • Si dans MaClasse la déclaration de var utilisait le mot clef private plutôt que public alors var serait inaccessible, du à son niveau de protection.




  • Maintenant, si dans MaClasse on déclare également une méthode
    Code:
    public MaClasse
    {
      public int var;

      public void Test()
      {
        var = 10;
      }
    }
  • Dans MaClasse2, il est possible de faire appel à la méthode Test, dans l'exemple via la méthode AppelATest
    Code:
    public MaClasse2 : MaClasse
    {

      public void AppelATest()
      {
        Test();
      }

    }
  • Mais il n'est pas possible dans MaClasse2 de déclarer à nouveau une méthode appelée Test, par héritage, MaClasse2 contient déjà une méthode Test.
    Alors comment faire pour changer de test ?
  • Il faut pour celà que les méthodes définies dans la classe mère le soient avec le mot clef virtual, il sera alors possible dans les classes dérivées de les re-déclarer, à l'aide du mot clef override.
    Code:
    public MaClasse
    {
      public int var;

      public [b]virtual[/b] void Test()
      {
        var = 10;
      }

    }
    et
    Code:

    public MaClasse2 : MaClasse
    {

      public [b]override[/b] void Test()
      {
        var = 2000;
      }

    }
  • Désormais, la méthode Test mettra var à 10 si l'objet est une instance de MaClasse, et 2000 si l'objet est une instance de MaClasse2.



De tout ça, on peut dire que lorsqu'on crée une nouvelle classe héritant d'une autre, on pourra y utiliser toutes les variables déclarées avec le mot clef public ainsi que toutes les méthodes déclarées avec le mot clef virtual ou le mot clef override.

Il faut aussi savoir :

  • qu'une méthode délarant le mot clef virtual peut être "overridée" dans une classe héritière directe ou indirecte.
    C'est à dire que virtual dans Class1 elle peut ne pas être redéfinie dans Class2 et l'être par la suite dans Class3

  • que l'override prend le pas totalement sur la méthode primitive.

    C'est à dire qu'une fois overridée dans Class2, la méthode de Class1 ne peut plus être appelée.



Celà peut être embétant : si dans une classe, une méthode contient un code long comme le bras et qu'on ne veut changer qu'une ligne, il faudrait tout réécire ?

  • La méthode primitive peut être appelée avec le mot clef base
  • On verra souvent une méthode commencer ou finir par un appel à sa méthode de base, tout en ayant déclaré un comportement propre.
  • Exemple :
    Code:
    public MaClasse
    {
      public int var;
     
      public virtual void Test()
      {
        var = 10;
      }

    }
    et
    Code:

    public MaClasse2 : MaClasse
    {

      public override void Test()
      {
        base.Test();
        var ++; // ++ veut dire +1

        // la ligne suivante écrit var dans la console, très utile pour les tests
        Console.WriteLine( var.ToString() );
      }

    }
  • Dans l'exemple précédent, à partir d'un objet de type MaClasse2, l'appel à la méthode Test appelera sa base, à savoir la méthode Test de la classe MaClasse, var prend alors la valeur 10.
    Ensuite l'instruction var++ assigne à var une valeur de 11.
    C'est ce qui serait affiché par la console.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
 
Héritage, virtual/override, base
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Désentrelacer avec Virtual Dub?
» RE-ANARCHIE AVEC UNE BASE DE DONNEES
» Itinéraire google maps vers base camp.
» bug Base Camp (résolu)
» Base de donnée sur le nouveau forum éronée et mal istallée

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
RunUO-FR :: Tutoriaux Scripts :: Tutoriaux C#-
Sauter vers: