Maison >développement back-end >C++ >C # Méthode Overriding: Virtual / Override vs New - Quelle est la différence?

C # Méthode Overriding: Virtual / Override vs New - Quelle est la différence?

Barbara Streisand
Barbara Streisandoriginal
2025-01-27 06:26:09739parcourir

C# Method Overriding: Virtual/Override vs. New – What's the Difference?

Compréhension approfondie de la réécriture de méthodes en C#

En programmation orientée objet, la substitution de méthode permet à une classe dérivée de fournir sa propre implémentation de méthodes héritées d'une classe de base. C# propose deux manières distinctes de remplacer des méthodes : les mots-clés « virtual » et « override », ou simplement déclarer une nouvelle méthode avec la même signature.

Remplacement virtuel

Lorsqu'une méthode est déclarée comme "virtuelle" dans la classe de base, elle peut être remplacée dans la classe dérivée à l'aide du mot-clé "override". Cette approche permet à une classe dérivée de fournir sa propre implémentation tout en conservant la signature de méthode d'origine. Au moment de l'exécution, lorsque l'objet est d'un type dérivé, la méthode remplacée sera appelée même si la variable de référence contenant l'objet est du type de base.

Nouveau

Alternativement, une méthode peut être remplacée dans une classe dérivée en déclarant une nouvelle méthode avec la même signature et en la marquant comme "nouvelle". Cette méthode remplace complètement l'implémentation dans la classe de base et la méthode substituée est appelée quel que soit le type de l'objet d'exécution.

Exemples de différences

Pour illustrer la différence, considérons l'extrait de code suivant :

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

public class Bar : Foo
{
    public override bool DoSomething() { return true; }
}</code>

Si on appelle le code comme suit :

<code class="language-csharp">Foo a = new Bar();
a.DoSomething();</code>

Les résultats varieront selon la méthode utilisée pour la réécriture :

  • Virtual Override : Le runtime appellera la méthode remplacée dans la classe dérivée (Bar), même si l'objet est stocké dans une variable de type Foo.
  • Nouveau : appellera la nouvelle méthode dans la classe dérivée (Bar), remplaçant ainsi l'implémentation dans la classe de base (Foo).

Principales différences

En résumé, les principales différences entre « virtuel » « override » et « nouveau » pour le remplacement de méthode sont :

  • Appel : Le remplacement virtuel permet d'appeler une méthode remplacée uniquement si le type de l'objet correspond à la classe dérivée, alors que new appelle toujours la nouvelle méthode quel que soit le type de l'objet.
  • Implémentation : Le remplacement virtuel conserve la signature de la méthode d'origine et permet aux classes dérivées de fournir des implémentations alternatives, tandis que new remplace l'implémentation dans la classe de base.
  • Utilisations : Le remplacement virtuel est plus adapté au comportement polymorphe où différentes classes dérivées fournissent leur propre implémentation, tandis que new convient à la modification ou à la personnalisation des méthodes de classe de base.

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