共用方式為


覆寫屬性及方法

更新:2007 年 11 月

衍生類別 (Derived Class) 會繼承 (Inheritance) 其基底類別 (Base Class) 定義的屬性及方法。這個方法很實用,因為當這些項目適用於衍生類別時,您便可以重複使用這些項目。如果基底類別中的屬性或方法有標示 Overridable 關鍵字,您可以在衍生類別中為成員定義新的實作。藉由在衍生類別中重新定義成員,可以使用 Overrides 關鍵字來遮蔽該成員。當您無法使用對成員使用 "as is" 時,這個功能就會非常有用。

實際上,覆寫成員通常是用來實作多型。如需詳細資訊,請參閱多型

下列規則適用於覆寫方法。

  • 您只能覆寫基底類別中已使用 Overridable 關鍵字標記的成員。

  • 根據預設,屬性和方法都是 NotOverridable。

  • 覆寫成員的引數必須和來自於基底類別中繼承成員的引數相同。

  • 成員的新實作可藉由在方法名稱之前指定 MyBase,以呼叫父項類別中的原始實作。

    注意事項:

    多載、覆寫及遮蔽是三個容易混淆的類似概念。如需詳細資訊,請參閱 Visual Basic 中的物件簡介

範例

假定您要定義用來處理薪水帳冊的類別。您可以定義泛型 Payroll 類別,這個類別包含 RunPayroll 方法,可以計算一般週薪。然後,您可針對更特定的 BonusPayroll 類別,使用 Payroll 做為基底類別,於分發員工獎金時使用。

BonusPayroll 類別可繼承和覆寫在基底類別 Payroll 中定義的 PayEmployee 方法。

下列範例定義基底類別 Payroll,以及衍生類別 BonusPayroll,用以覆寫 PayEmployee 繼承方法。程序 RunPayroll 會建立 Payroll 物件和 BonusPayroll 物件,並將它們傳遞至函式 Pay,該函式會執行這兩個物件的 PayEmployee 方法。

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

請參閱

概念

多載屬性和方法

覆寫修飾詞

Visual Basic 中的遮蔽功能

其他資源

多型