Maison > développement back-end > C++ > Quelle est la différence entre 'Virtual Override' et 'Nouveaux' mots clés dans la méthode C # Overriding?

Quelle est la différence entre 'Virtual Override' et 'Nouveaux' mots clés dans la méthode C # Overriding?

Patricia Arquette
Libérer: 2025-01-27 06:41:09
original
449 Les gens l'ont consulté

What's the Difference Between

Compréhension approfondie de la différence entre les mots-clés "virtual override" et "new" dans les déclarations de méthode

Dans la programmation orientée objet, la substitution de méthode permet aux sous-classes de fournir leurs propres implémentations des méthodes définies dans leur classe parent. Cela permet la personnalisation et le polymorphisme du code. Cependant, il existe une différence subtile entre déclarer une méthode dans un type de base en combinaison avec les mots-clés « virtual » et « override » et utiliser le mot-clé « new » dans un sous-type.

« remplacement virtuel »

Quand une méthode déclarée dans un type de base est "virtuelle", cela signifie que ses sous-classes peuvent remplacer la méthode. Ainsi, lorsqu'une sous-classe remplace une méthode à l'aide du mot-clé "override", elle remplace en fait l'implémentation dans la classe de base.

«nouveau»

En revanche, lorsqu'une méthode déclarée dans une sous-classe est "nouvelle", elle crée une nouvelle méthode portant le même nom que la méthode de la classe de base. Une méthode de sous-classe ne remplace pas une méthode de classe de base ; elle fonctionne indépendamment.

Différences de comportement

La principale différence entre « remplacement virtuel » et « nouveau » réside dans leur impact sur le comportement d'exécution. Prenons l'exemple suivant :

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

public class DerivedClass : BaseClass
{
    public override bool DoSomething() { return true; }
}

// ...

BaseClass obj = new DerivedClass();
obj.DoSomething(); // 返回 true (重写后的实现)</code>
Copier après la connexion

Si nous utilisons "new" au lieu de "override" dans DerivedClass, cela entraînera une méthode différente masquant la méthode de la classe de base. Dans ce cas :

<code class="language-csharp">//...

DerivedClass obj = new DerivedClass();
obj.DoSomething(); // 返回 false (基类实现)</code>
Copier après la connexion

Héritage et polymorphisme

Lors de l'utilisation du "remplacement virtuel", les méthodes de sous-classe peuvent accéder et modifier l'implémentation fournie par la classe parent. Cela permet un héritage et un polymorphisme flexibles. Au lieu de cela, "new" remplace complètement la méthode de la classe de base, rompant ainsi la chaîne d'héritage.

Table de répartition virtuelle (VDT)

En C#, les méthodes virtuelles sont stockées dans une table de répartition virtuelle (VDT). Lorsqu'une méthode virtuelle est appelée, l'implémentation appropriée est déterminée en fonction du type de l'objet réel au moment de l'exécution. Cela rend le polymorphisme possible. Cependant, la « nouvelle » méthode n’est pas incluse dans le VDT, ce qui empêche la sélection dynamique de la méthode.

Conclusion

"virtual override" permet de remplacer les méthodes de la classe de base pour obtenir l'héritage et le polymorphisme, tandis que "new" crée des méthodes indépendantes dans les sous-classes. Comprendre la différence entre ces deux mots-clés est crucial pour remplacer efficacement les méthodes et concevoir un code orienté objet flexible.

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