Heim >Backend-Entwicklung >C++ >Virtuell vs. neu in C#: Wann sollten Basisklassenmethoden überschrieben oder ausgeblendet werden?

Virtuell vs. neu in C#: Wann sollten Basisklassenmethoden überschrieben oder ausgeblendet werden?

Barbara Streisand
Barbara StreisandOriginal
2025-01-27 06:33:09227Durchsuche

Virtual vs. New in C#: When to Override or Hide Base Class Methods?

Die Verwendung von virtuellen und neuen Schlüsselwörtern im C#

In der Objekt -orientierten Programmierung werden diese Methoden normalerweise in der Basisklasse definiert, und diese Methoden werden in der Derivatklasse neu geschrieben oder neu definiert. Obwohl sowohl "virtuelle" als auch "neue" Schlüsselwörter verwendet werden können, um die Methodenerklärung zu ändern, haben sie unterschiedliche Implementierungsmethoden.

Virtuelles Umschreiben

Die Methode der Methode in der Basisklasse ist "virtuell", was darauf hinweist, dass Unterklassen neu geschrieben werden können.

    Erlauben Sie abgeleitete Klassen, verschiedene Methoden zur Implementierung bereitzustellen, ohne die Erbschaftskette zu zerstören.
  • Neues Schlüsselwort

Geben Sie eine neue Methode der gleichnamigen Stiftung in der abgeleiteten Klasse an.

verstecken die Basisklassenmethode und erstellen Sie eine neue Implementierung in der abgeleiteten Klasse.
  • zerstören Sie die Erbschaftskette, was bedeutet, dass die abgeleitete Methode nicht mit der Basismethode zusammenhängt.
  • Beispiel
Betrachten Sie den folgenden Code:

Wenn wir eine Instanz von abgeleitetem Erstellen erstellen und in der Variablen des Basistyps speichern, ruft der Aufruf für DoSomething () die Umschreibungsmethode in der abgeleiteten:

auf:

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

public class Derived : Base
{
    public override bool DoSomething() { return true; }
}</code>
Im Gegenteil, wenn wir das neue Keyword in abgeleiteten verwenden, wird der Aufruf für Dosen () eine neue Methode in der abgeleiteten Methode aufrufen.

<code class="language-csharp">Base a = new Derived();
a.DoSomething(); // 返回 true</code>
Wann soll ich mit virtuellem und neuem

umschreiben
<code class="language-csharp">public class Derived : Base
{
    public new bool DoSomething() { return true; }
}</code>
<code class="language-csharp">Base a = new Derived();
a.DoSomething(); // 返回 true (Derived 中的新方法)</code>
Verwenden Sie virtuell, um das Verhalten umzuschreiben und zu erweitern und gleichzeitig die Erbschaftskette aufrechtzuerhalten.

Verwenden Sie neu, um eine neue, unabhängige Implementierung zu erstellen, wodurch die Erbschaftskette zerstört wird.

Das obige ist der detaillierte Inhalt vonVirtuell vs. neu in C#: Wann sollten Basisklassenmethoden überschrieben oder ausgeblendet werden?. 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