"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Virtual / Override vs nouveau dans C #: Quand dois-je utiliser quel mot clé pour la mise en place de la méthode?

Virtual / Override vs nouveau dans C #: Quand dois-je utiliser quel mot clé pour la mise en place de la méthode?

Publié le 2025-02-06
Parcourir:191

Virtual/Override vs. New in C#: When Should I Use Which Keyword for Method Overriding?

Virtual / Override et nouveaux mots clés en C #: Quand utiliser quel mot clé pour réécrire la méthode?

Lors de la définition des méthodes dans les classes de base, les programmeurs sont souvent confrontés au problème de l'utilisation des mots clés "virtuels" ou "nouveaux". Cette décision affecte considérablement le comportement de la réécriture de la méthode dans les classes dérivées.

Virtual Override

Utilisez le mot-clé "virtuel" dans la méthode de la classe de base pour indiquer qu'il peut être remplacé dans la classe dérivée. Pour remplacer la méthode, la classe dérivée doit utiliser le mot-clé "remplacer". Cela garantit que la méthode remplacée fonctionne comme prévu, en maintenant la hiérarchie et le polymorphisme de l'héritage.

Lorsque la classe dérivée appelle une méthode réécrite, elle effectuera la version remplacée, même si la variable de référence tenant l'objet est du type de classe de base. C'est ce qu'on appelle la liaison tardive et permet un comportement dynamique.

nouveau mot-clé

Au lieu de cela, le "nouveau" mot-clé de la méthode de classe dérivée déclare une nouvelle méthode qui cache des méthodes héréditaires avec le même nom. Lorsqu'il est utilisé, la nouvelle méthode remplace les méthodes héréditaires dans la classe dérivée, détruisant ainsi le polymorphisme.

Lorsque la classe dérivée appelle une méthode déclarée avec "nouvelle", il exécute la nouvelle méthode quel que soit le type de variable de référence qui contient l'objet. Ceci est considéré comme une liaison précoce et entrave le polymorphisme.

Exemple

Considérez l'exemple de code suivant:

public class Base
{
    public virtual bool DoSomething() { return false; }
}

public class Derived : Base
{
    public new bool DoSomething() { return true; }
}

Si vous attribuez une instance de dérivée à une variable de base de type et appelez dosomething (), le résultat sera faux si vous utilisez virtuel / dépasser, mais si vous utilisez un nouveau, le résultat sera vrai. Cela met en évidence la différence entre la liaison tardive et la liaison précoce.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3