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 ?
Réponses
Trop de publicités?Cela ressemble à une vieille question, permettez-moi d'essayer une réponse différente :
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).override
: Cela signifie que je n'accepte pas l'implémentation des membres de ma classe parente et que je ferai différemment.
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 leoverride modifier
:- Si vous voulez
hide
délibérément un membre, auquel cas vous pouvez appliquer lenew modifier
au membre de la sous-classe.The new modifier does nothing more than suppress the compiler warning that would otherwise result