Virtual/override vs. neues Schlüsselwort in C#: Wann sollte welches Schlüsselwort zum Überschreiben von Methoden verwendet werden?
Bei der Definition von Methoden in Basisklassen stehen Programmierer oft vor dem Dilemma, ob sie das Schlüsselwort „virtual“ oder „new“ verwenden sollen. Diese Entscheidung kann das Verhalten von Methodenüberschreibungen in abgeleiteten Klassen erheblich beeinflussen.
Virtuelle Überschreibung
Die Verwendung des Schlüsselworts „virtual“ in einer Basisklassenmethode zeigt an, dass es in einer abgeleiteten Klasse überschrieben werden kann. Um diese Methode zu überschreiben, müssen abgeleitete Klassen das Schlüsselwort „override“ verwenden. Dadurch wird sichergestellt, dass überschriebene Methoden wie erwartet funktionieren und Vererbungshierarchien und Polymorphismus beibehalten werden.
Wenn eine abgeleitete Klasse eine überschriebene Methode aufruft, führt sie die überschriebene Version aus, auch wenn die Referenzvariable, die das Objekt enthält, vom Typ der Basisklasse ist. Dies wird als späte Bindung bezeichnet und ermöglicht dynamisches Verhalten.
Neues Schlüsselwort
Im Gegensatz dazu deklariert das Schlüsselwort „new“ in einer abgeleiteten Klassenmethode eine neue Methode, die die geerbte Methode mit demselben Namen verbirgt. Bei Verwendung ersetzt die neue Methode die geerbte Methode in der abgeleiteten Klasse und unterbricht so den Polymorphismus.
Wenn eine abgeleitete Klasse eine mit „new“ deklarierte Methode aufruft, führt sie die neue Methode unabhängig vom Typ der Referenzvariablen aus, die das Objekt enthält. Dies gilt als frühe Bindung und verhindert den Polymorphismus.
Beispiel
Betrachten Sie das folgende Codebeispiel:
<code class="language-csharp">public class Base { public virtual bool DoSomething() { return false; } } public class Derived : Base { public new bool DoSomething() { return true; } }</code>
Wenn Sie einer Variablen vom Typ Base eine Instanz von Derived zuweisen und DoSomething() aufrufen, ist das Ergebnis false, wenn virtual/override verwendet wird, aber true, wenn new verwendet wird. Dies verdeutlicht den Unterschied zwischen später Bindung und früher Bindung.
Das obige ist der detaillierte Inhalt vonVirtual/Override vs. NEU in C#: Wann sollte ich welches Schlüsselwort für die Überschreitung von Methoden verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!