Maison >développement back-end >C++ >Quelle est la différence entre l'observation et le remplacement en C #?

Quelle est la différence entre l'observation et le remplacement en C #?

Barbara Streisand
Barbara Streisandoriginal
2025-01-28 14:08:10489parcourir

What's the Difference Between Shadowing and Overriding in C#?

dans la compréhension de la compréhension du caché et de la réécriture en C #

Dans la programmation, la cachette et la réécriture orientées objet sont les concepts clés qui affectent le comportement du code. Cet article explorera les différences entre les deux dans le système d'héritage de la classe C #.

Supposons que nous ayons une base "A", y compris deux méthodes "foo" et "bar". La méthode "FOO" est déclarée pour le public et la déclaration de la méthode "BAR" est virtuelle publique, permettant à la classe dérivée de réécrire son implémentation. Maintenant, considérons un dérivé "B" hérité de "A".

Hidden

Dans Hidden, la classe dérivée "B" définit une méthode appelée "FOO", et sa liste de noms et de paramètres est la même que la méthode de base. Cependant, dans ce cas, la mise en œuvre de la méthode dans le "B" n'a pas réécrit la classe de base. Il crée une nouvelle méthode indépendante dans la classe "B" pour masquer la méthode de base.

par exemple, dans le fragment de code fourni:

Les nouveaux mots clés "avant la méthode chinoise de classe

Classe" B "indiquent que l'objet de type" B "est accessible par le type" B ".
<code class="language-c#">public new int Foo() { return 1;}     //隐藏</code>

réécriture

En revanche, lorsque la réécriture se produit dans une méthode de la classe dérivée, la méthode est la même que la méthode virtuelle ou la méthode d'abstraction dans la classe de base. Dans ce cas, l'implémentation de la classe dérivée a explicitement remplacé l'implémentation de la classe de base et est devenu le comportement par défaut de l'instance dérivée.

dans un exemple donné:

Parce que l'instruction "bar" dans la base "A" est virtuelle, le mot-clé "Override" permet à la classe "B" de la réécrire et de fournir son propre comportement.

<code class="language-c#">public override int Bar() {return 1;} //重写</code>
Impact

Lors de la conversion des instances dérivées en une référence de classe de base, la cachette peut entraîner un comportement accidentel. Dans ce cas, la méthode cachée de la classe de base peut être appelée au lieu de la méthode de réécriture dans la classe dérivée, qui peut entraîner des erreurs pendant l'exécution.

Cependant, la réécriture suit la structure hiérarchique de l'héritage et garantit que les méthodes appropriées définies dans ces classes sont mises en œuvre dans la méthode appropriée de la classe dérivée, afin d'assurer des comportements cohérents et attendus.

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