次の方法で共有


プロパティとメソッドのオーバーライド

更新 : 2007 年 11 月

派生クラスは、基本クラスで定義されているプロパティとメソッドを継承します。このことにより、派生クラスに適したプロパティやメソッドを必要に応じて再利用できるので便利です。基本クラスで Overridable キーワードが付けられているプロパティまたはメソッドの場合、派生クラスではそのメンバに対して新しい実装を定義できます。Overrides キーワードは、派生クラスでメンバを再定義することによってシャドウする場合に使用します。これは、メンバを "そのまま" 使用できない場合に便利です。

オーバーライドしたメンバは、実際にはポリモーフィズムを実装する目的でよく使われます。詳細については、「ポリモーフィズム」を参照してください。

メソッドをオーバーライドするときには、次の規則があります。

  • オーバーライドできるメンバは、基本クラスで Overridable キーワードが使用されているメンバだけです。

  • 既定では、プロパティとメソッドは NotOverridable です。

  • オーバーライドしたメンバは、基本クラスから継承したメンバと同じ引数を持っている必要があります。

  • メンバの新しい実装で、メソッド名の前に MyBase を指定すると、親クラスの元の実装を呼び出すことができます。

    818x9db9.alert_note(ja-jp,VS.90).gifメモ :

    オーバーロード、オーバーライド、およびシャドウの概念は、似ているためにしばしば混同されます。詳細については、「Visual Basic のオブジェクトの概要」を参照してください。

給与支払いを処理するクラスを定義するとします。まず、通常の 1 週間分の給与を計算する RunPayroll メソッドを含む汎用の Payroll クラスを定義します。次に、Payroll を基本クラスとして、より特化した BonusPayroll クラスを作成します。これはボーナスの支給時に使用します。

BonusPayroll クラスでは、基本の Payroll クラスで定義されている PayEmployee メソッドを継承し、オーバーライドできます。

次の例では、基本クラス Payroll と派生クラス BonusPayroll を定義しています。BonusPayroll は、継承したメソッド PayEmployee をオーバーライドします。RunPayroll プロシージャは、Payroll オブジェクトと BonusPayroll オブジェクトを作成し、Pay 関数に渡します。この関数は、この 2 つのオブジェクトの 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 におけるシャドウ

その他の技術情報

ポリモーフィズム