87 votes

Quelle est la différence entre le remplacement et les nouveaux mots-clés en C# ?

Quelle est la différence entre les override et new en C# lors de la définition de méthodes dans les hiérarchies de classes ?

10voto

Dhananjay Points 1047

Cela ressemble à une vieille question, permettez-moi d'essayer une réponse différente :

  1. new : comme son nom l'indique, il s'agit d'un nouveau membre dans la famille de la hiérarchie d'héritage et il sera utilisé comme membre de base pour la suite de la chaîne (s'il est marqué comme virtuel).

  2. override : Cela signifie que je n'accepte pas l'implémentation des membres de ma classe parente et que je ferai différemment.

5voto

Sina Lotfi Points 1120

Considérez la hiérarchie de classes suivante :

 using System;

namespace ConsoleApp
{     
     public static class Program
     {   
          public static void Main(string[] args)
          {    
               Overrider overrider = new Overrider();
               Base base1 = overrider;
               overrider.Foo();
               base1.Foo();

               Hider hider = new Hider();
               Base base2 = hider;
               hider.Foo();
               base2.Foo();
          }   
     }   

     public class Base
     {
         public virtual void Foo()
         {
             Console.WriteLine("Base      => Foo");
         }
     }

     public class Overrider : Base
     {
         public override void Foo()
         {
             Console.WriteLine("Overrider => Foo");
         }
     }

     public class Hider : Base
     {
         public new void Foo()
         {
             Console.WriteLine("Hider     => Foo");
         }
     }
}    

La sortie des codes ci-dessus doit être :

 Overrider => Foo
Overrider => Foo

Hider     => Foo
Base      => Foo
  • Une sous-classe overrides une méthode virtuelle en appliquant le override modifier :
  • Si vous voulez hide délibérément un membre, auquel cas vous pouvez appliquer le new modifier au membre de la sous-classe. The new modifier does nothing more than suppress the compiler warning that would otherwise result

2voto

Daniel Mann Points 9146

override vous permet de remplacer une méthode virtuelle dans une classe de base afin que vous puissiez y mettre une implémentation différente. new masquera une méthode non virtuelle dans une classe de base.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X