In Visual Basic .NET wird Vererbung mit dem Schlüsselwort Inherits implementiert. Es ermöglicht das Erstellen von Klassenhierarchien, die gemeinsame und überschreibbare Methoden und Eigenschaften implementieren.
Für die Unterstützung der Polymorphie werden Methoden in der Basisklasse mit dem Modifikator Overridable deklariert, während sie in der abgeleiteten Klasse mit Overrides überschrieben werden. Um weitere Überschreibungen zu verhindern, dient der Modifikator NotOverridable.
Beispiel:
' Basisklasse Animal mit virtueller Methode Public Class Animal Public Overridable Sub Speak() Console.WriteLine("Das Tier gibt ein Geräusch von sich.") End Sub End Class ' Abgeleitete Klasse Dog überschreibt Speak Public Class Dog Inherits Animal Public Overrides Sub Speak() Console.WriteLine("Der Hund bellt.") End Sub End Class Sub Main() Dim a As Animal = New Dog() a.Speak() ' Gibt aus: Der Hund bellt. End Sub
F: Ist es möglich, in Visual Basic .NET Methoden zu überschreiben, die nicht als Overridable/Abstract in der Basisklasse deklariert sind?
A: Nein. Nur Methoden, die als Overridable gekennzeichnet oder über ein Interface/Abstraktion deklariert sind, können bei der Vererbung überschrieben werden. Der Versuch, Overrides für eine normale Methode zu verwenden, führt zu einem Kompilierungsfehler.
' Fehler: Public Class A Public Sub Foo() End Sub End Class Public Class B Inherits A Public Overrides Sub Foo() ' Kompilierungsfehler End Sub End Class
Geschichte
1. In einem realen Projekt, das mit Mikroservice-Architektur verbunden ist, erklärte ein neues Teammitglied eine virtuelle Methode als normal (ohne Overridable) in der Basisklasse-Controller. Später versuchte ein anderer Entwickler, diese Methode für spezielle Behandlungen zu überschreiben. Infolgedessen entstanden doppelte Logik und Bugs, da die Implementierung der Elternklasse immer aufgerufen wurde, trotz der Anwesenheit der Methode im Erben.
Geschichte
2. Eine unzureichende Bearbeitung der Architektur und die fehlende Verwendung von Polymorphie führten zu Hunderten von Zeilen überflüssigem Code: Wenn ein neuer Erbe hinzugefügt werden musste, musste ein großer Teil der Methode der Basisklasse neu geschrieben werden, anstatt einfach das erforderliche Override zu implementieren. Dies erschwerte die Wartung und Pflege.
Geschichte
3. Ein Fall aus einer Unternehmensanwendung: Bei der Migration auf .NET Core markierte ein Entwickler eine Methode als Overridable, fügte jedoch fälschlicherweise das Implements-Interface nicht hinzu. Infolgedessen trat eine Mehrdeutigkeit bei der Auflösung von Methoden in der Vererbungshierarchie auf, und es entstanden Probleme beim Aufruf über einen Verweis auf das Interface, was zu nicht funktionalen Funktionen führte.