Maison > développement back-end > C++ > Virtual vs nouveau dans C #: Quand remplacer ou masquer les méthodes de classe de base?

Virtual vs nouveau dans C #: Quand remplacer ou masquer les méthodes de classe de base?

Barbara Streisand
Libérer: 2025-01-27 06:33:09
original
210 Les gens l'ont consulté

Virtual vs. New in C#: When to Override or Hide Base Class Methods?

Utilisation de mots-clés virtuels et nouveaux en C#

Dans la programmation orientée objet, les méthodes sont généralement définies dans les classes de base et remplacées ou redéfinies dans les classes dérivées. Bien que les mots-clés « virtual » et « new » puissent être utilisés pour modifier les déclarations de méthodes, ils sont implémentés de différentes manières.

réécriture virtuelle

  • Déclarez la méthode comme "virtuelle" dans la classe de base, indiquant que les sous-classes peuvent la remplacer.
  • Permet aux classes dérivées de fournir différentes implémentations de méthodes sans rompre la chaîne d'héritage.

nouveau mot clé

  • Déclarez une nouvelle méthode dans la classe dérivée avec le même nom que la méthode dans la classe de base.
  • Masquez la méthode de la classe de base et créez une nouvelle implémentation dans la classe dérivée.
  • Brise la chaîne d'héritage, ce qui signifie que les méthodes de classe dérivées n'ont rien à voir avec les méthodes de classe de base.

Exemple

Considérez le code suivant :

<code class="language-csharp">public class Base
{
    public virtual bool DoSomething() { return false; }
}

public class Derived : Base
{
    public override bool DoSomething() { return true; }
}</code>
Copier après la connexion

Si nous créons une instance de Derived et la stockons dans une variable de type Base, l'appel à DoSomething() appellera la méthode remplacée dans Derived :

<code class="language-csharp">Base a = new Derived();
a.DoSomething(); // 返回 true</code>
Copier après la connexion

En revanche, si on utilise le mot-clé new dans Derived, l'appel à DoSomething() invoquera la nouvelle méthode dans Derived, même si la variable est de type Base :

<code class="language-csharp">public class Derived : Base
{
    public new bool DoSomething() { return true; }
}</code>
Copier après la connexion
<code class="language-csharp">Base a = new Derived();
a.DoSomething(); // 返回 true (Derived 中的新方法)</code>
Copier après la connexion

Quand utiliser le remplacement virtuel par rapport au nouveau

  • Utilisez des remplacements virtuels pour hériter et étendre le comportement tout en conservant la chaîne d'héritage.
  • Utilisez new pour créer une nouvelle implémentation indépendante, brisant ainsi la chaîne d'héritage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal