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
Barbara Streisandoriginal
2025-01-27 06:33:09219parcourir

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>

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>

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>
<code class="language-csharp">Base a = new Derived();
a.DoSomething(); // 返回 true (Derived 中的新方法)</code>

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!

Déclaration:
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