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

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

Barbara Streisand
Libérer: 2025-01-28 14:11:39
original
314 Les gens l'ont consulté

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

C # Osgrais héréditaire et complication différentielle héritée

Dans le mécanisme de succession, les programmeurs rencontreront deux technologies très différentes: l'observation (cachée) et la priorité. Il est essentiel de comprendre la différence subtile entre les deux pour une utilisation efficace de l'héritage.

Overriding

Lorsqu'une méthode se produit dans une instruction de sous-classe, la méthode définie dans la classe de base a le même nom, le même type de retour et la liste des paramètres. La réécriture permet l'implémentation personnalisée de la méthode de la classe de base. Lorsque l'objet sous-classe appelle la méthode de réécriture, le code de la sous-classe couvrira efficacement le comportement de la méthode de classe de base. En revanche,

ombrage

Lorsqu'une méthode se produit dans une instruction de sous-classe, la méthode de cette méthode a le même nom que la méthode dans la classe de base, mais la signature de la méthode (type de retour ou liste de paramètres) différent. Une nouvelle méthode est cachée dans la sous-classe, qui remplace la méthode par le même nom dans la classe de base. Appelez la méthode cachée sur l'objet de la sous-classe pour effectuer le code dans la sous-classe, cachant efficacement la méthode de base. Considérez l'exemple suivant:

Lorsque vous appelez la méthode sur les objets de classe A et B, la sortie attendue est la suivante:
<code class="language-csharp">class A {
   public int Foo() { return 5; }
   public virtual int Bar() { return 5; }
}
class B : A {
   public new int Foo() { return 1; }     // 隐藏
   public override int Bar() { return 1; } // 重写
}</code>
Copier après la connexion

La différence clé est lors de la conversion de l'objet B en un objet:
<code class="language-csharp">A clA = new A();
B clB = new B();

Console.WriteLine(clA.Foo()); // 输出:5
Console.WriteLine(clA.Bar()); // 输出:5
Console.WriteLine(clB.Foo()); // 输出:1
Console.WriteLine(clB.Bar()); // 输出:1

// 将 B 转换为 A
Console.WriteLine(((A)clB).Foo()); // 输出:5</code>
Copier après la connexion

Pour les méthodes cachées (FOO), appelez la réalisation de la classe de base.
  • Pour la méthode de réécriture (BAR), appelez l'implémentation de la sous-classe.
  • Hidden (ombrage)
Si la méthode de base dépend dans le code qui n'est pas considéré, il peut y avoir des problèmes. Cela peut provoquer un comportement accidentel et rendre le débogage difficile. D'un autre côté, Le remplacement

fournit un mécanisme contrôlé pour modifier la méthode à implémenter, tout en maintenant la structure 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