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>
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>
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!