Überschreiben von Eigenschaften und Methoden
Aktualisiert: November 2007
Eine abgeleitete Klasse erbt die Eigenschaften und Methoden, die in ihrer Basisklasse definiert sind. Dies ist sinnvoll, da Sie diese Elemente wiederverwenden können, wenn sie sich für die abgeleitete Klasse eignen. Wenn die Eigenschaft oder Methode in der Basisklasse mit dem Overridable-Schlüsselwort gekennzeichnet ist, können Sie in der abgeleiteten Klasse eine neue Implementierung für den Member definieren. Verwenden Sie das Overrides-Schlüsselwort, um ein Shadowing für den Member durchzuführen, indem Sie ihn in der abgeleiteten Klasse neu definieren. Dies ist hilfreich, wenn Sie den Member nicht unverändert verwenden können.
In der Praxis werden überschriebene Member oft für den Einsatz von Polymorphismus verwendet. Weitere Informationen finden Sie unter Polymorphismus.
Für das Überschreiben von Methoden gelten folgende Regeln:
Sie können nur Member überschreiben, die in ihrer Basisklasse durch das Overridable-Schlüsselwort gekennzeichnet sind.
Eigenschaften und Methoden sind standardmäßig NotOverridable.
Überschriebene Member müssen dieselben Argumente aufweisen wie die geerbten Member aus der Basisklasse.
Die neue Implementierung eines Members kann die ursprüngliche Implementierung in der übergeordneten Klasse aufrufen, indem Sie vor dem Methodennamen MyBase angeben.
Hinweis: Überladen, Überschreiben und Shadowing sind ähnliche Konzepte, die leicht verwechselt werden können. Weitere Informationen finden Sie unter Einführung in Objekte in Visual Basic.
Beispiel
Angenommen, Sie möchten Klassen definieren, um die Gehaltsliste zu verwalten. Sie können eine allgemeine Payroll-Klasse (Gehaltslistenklasse) definieren, die eine RunPayroll-Methode enthält, mit der das Gehalt für eine typische Woche berechnet wird. Sie können anschließend Payroll als Basisklasse für eine spezialisiertere BonusPayroll-Klasse verwenden, die beim Verteilen der Mitarbeiterboni verwendet wird.
Die BonusPayroll-Klasse kann die PayEmployee-Methode erben und überschreiben, die in der Payroll-Basisklasse definiert ist.
Im folgenden Beispiel wird eine Payroll-Basisklasse sowie eine abgeleitete Klasse mit dem Namen BonusPayroll definiert, die eine geerbte PayEmployee-Methode überschreibt. Eine Prozedur mit dem Namen RunPayroll erstellt ein Payroll-Objekt und leitet dieses zusammen mit einem BonusPayroll-Objekt an die Pay-Funktion weiter, die die PayEmployee-Methode beider Objekte ausführt.
Const BonusRate As Decimal = 1.45D
Const PayRate As Decimal = 14.75D
Class Payroll
Overridable Function PayEmployee( _
ByVal HoursWorked As Decimal, _
ByVal PayRate As Decimal) _
As Decimal
PayEmployee = HoursWorked * PayRate
End Function
End Class
Class BonusPayroll
Inherits Payroll
Overrides Function PayEmployee( _
ByVal HoursWorked As Decimal, _
ByVal PayRate As Decimal) _
As Decimal
' The following code calls the original method in the base
' class, and then modifies the returned value.
PayEmployee = MyBase.PayEmployee(HoursWorked, PayRate) * BonusRate
End Function
End Class
Sub RunPayroll()
Dim PayrollItem As Payroll = New Payroll
Dim BonusPayrollItem As New BonusPayroll
Dim HoursWorked As Decimal = 40
MsgBox("Normal pay is: " & _
PayrollItem.PayEmployee(HoursWorked, PayRate))
MsgBox("Pay with bonus is: " & _
BonusPayrollItem.PayEmployee(HoursWorked, PayRate))
End Sub
Siehe auch
Konzepte
Überladene Eigenschaften und Methoden