Heim >Backend-Entwicklung >C++ >Was ist der Unterschied zwischen Schatten und Überschreibung im C# -Vererbung?

Was ist der Unterschied zwischen Schatten und Überschreibung im C# -Vererbung?

Barbara Streisand
Barbara StreisandOriginal
2025-01-28 14:11:39310Durchsuche

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

c# erbte Schattierungs- und übergeordnete differentielle Erklärung

Im Erbmechanismus begegnen Programmierer zwei sehr unterschiedliche Technologien: Schatten (verborgen) und überschrieben. Das Verständnis des subtilen Unterschieds zwischen beiden ist für den effektiven Einsatz der Vererbung wesentlich.

überschrieben

Wenn eine Methode in einer Unterklasse -Anweisung auftritt, hat die in der Basisklasse definierte Methode denselben Namen, Rückgabe -Typ und Parameterliste. Das Umschreiben ermöglicht die benutzerdefinierte Implementierung der Basisklassenmethode. Wenn das Sub -Class -Objekt die Umschreibungsmethode aufruft, wird der Code in der Unterklasse das Verhalten der Basisklassenmethode effektiv abdecken. Im Gegensatz dazu

schatten

Wenn eine Methode in einer Unterklasse -Anweisung auftritt, hat die Methode dieser Methode denselben Namen wie die Methode in der Basisklasse, jedoch die Methodensignatur (Rückgabetyp oder Parameterliste) anders. Eine neue Methode ist in der Unterklasse versteckt, die die Methode in der Basisklasse durch denselben Namen ersetzt. Rufen Sie die versteckte Methode auf dem Objekt der Unterklasse auf, um den Code in der Unterklasse auszuführen und die Basismethode effektiv zu verbergen. Betrachten Sie das folgende Beispiel:

Wenn Sie die Methode auf den Objekten der Klasse A und B aufrufen, lautet die erwartete Ausgabe wie folgt:
<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>

Der Schlüsselunterschied besteht darin, das B -Objekt in ein Objekt zu konvertieren:
<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>

für versteckte Methoden (Foo) nennen Sie die Realisierung der Basisklasse.
  • für die Umschreibungsmethode (BAR) die Implementierung der Unterklasse.
  • versteckt (beschattet)
Wenn die Basismethode in dem Code abhängt, der nicht berücksichtigt wird, kann es Probleme geben. Es kann zu einem zufälligen Verhalten führen und das Debuggen erschweren. Andererseits liefert überschreiben

einen kontrollierten Mechanismus, um die implementierende Methode zu ändern und gleichzeitig die Erbschaftsstruktur beizubehalten.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen Schatten und Überschreibung im C# -Vererbung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn