Heim > Backend-Entwicklung > C++ > Was ist der Unterschied zwischen den Schlüsselwörtern „virtual override' und „new' beim Überschreiben von C#-Methoden?

Was ist der Unterschied zwischen den Schlüsselwörtern „virtual override' und „new' beim Überschreiben von C#-Methoden?

Patricia Arquette
Freigeben: 2025-01-27 06:41:09
Original
449 Leute haben es durchsucht

What's the Difference Between

Detailliertes Verständnis des Unterschieds zwischen den Schlüsselwörtern „virtual override“ und „new“ in Methodendeklarationen

Bei der objektorientierten Programmierung ermöglicht das Überschreiben von Methoden Unterklassen, ihre eigenen Implementierungen von Methoden bereitzustellen, die in ihrer übergeordneten Klasse definiert sind. Dies ermöglicht die Anpassung und Polymorphie des Codes. Es gibt jedoch einen subtilen Unterschied zwischen der Deklaration einer Methode in einem Basistyp in Kombination mit den Schlüsselwörtern „virtual“ und „override“ und der Verwendung des Schlüsselworts „new“ in einem Untertyp.

„virtuelle Überschreibung“

Wenn eine in einem Basistyp deklarierte Methode „virtuell“ ist, bedeutet dies, dass ihre Unterklassen die Methode überschreiben können. Wenn also eine Unterklasse eine Methode mit dem Schlüsselwort „override“ überschreibt, ersetzt sie tatsächlich die Implementierung in der Basisklasse.

„neu“

Wenn dagegen eine in einer Unterklasse deklarierte Methode „neu“ ist, wird eine neue Methode mit demselben Namen wie die Methode in der Basisklasse erstellt. Eine Unterklassenmethode überschreibt eine Basisklassenmethode nicht; sie arbeitet unabhängig.

Verhaltensunterschiede

Der Hauptunterschied zwischen „Virtual Override“ und „New“ besteht in der Auswirkung auf das Laufzeitverhalten. Betrachten Sie das folgende Beispiel:

<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>
Nach dem Login kopieren

Wenn wir in DerivedClass „new“ anstelle von „override“ verwenden, führt dies dazu, dass eine andere Methode die Basisklassenmethode verbirgt. In diesem Fall:

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

DerivedClass obj = new DerivedClass();
obj.DoSomething(); // 返回 false (基类实现)</code>
Nach dem Login kopieren

Vererbung und Polymorphismus

Bei Verwendung von „virtueller Überschreibung“ können Unterklassenmethoden auf die von der übergeordneten Klasse bereitgestellte Implementierung zugreifen und diese ändern. Dies ermöglicht eine flexible Vererbung und Polymorphie. Stattdessen ersetzt „new“ die Basisklassenmethode vollständig und unterbricht dadurch die Vererbungskette.

Virtuelle Versandtabelle (VDT)

In C# werden virtuelle Methoden in einer virtuellen Dispatch-Tabelle (VDT) gespeichert. Wenn eine virtuelle Methode aufgerufen wird, wird die geeignete Implementierung basierend auf dem Typ des tatsächlichen Objekts zur Laufzeit bestimmt. Dadurch ist Polymorphismus möglich. Allerdings ist die „neue“ Methode nicht im VDT enthalten, was eine dynamische Methodenauswahl verhindert.

Fazit

„Virtual Override“ ermöglicht das Überschreiben von Basisklassenmethoden, um Vererbung und Polymorphismus zu erreichen, während „New“ unabhängige Methoden in Unterklassen erstellt. Das Verständnis des Unterschieds zwischen diesen beiden Schlüsselwörtern ist entscheidend, um Methoden effektiv zu überschreiben und flexiblen objektorientierten Code zu entwerfen.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen den Schlüsselwörtern „virtual override' und „new' beim Überschreiben von C#-Methoden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage