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.
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