次の方法で共有


詳細情報 : メンバをオーバーライドする

更新 : 2007 年 11 月

このレッスンでは、派生クラスのメンバをオーバーライドする方法について説明します。

前のレッスンでは、基本クラスから継承し、新しいプロパティを使用して派生クラスを拡張する方法について説明しました。派生クラスに新しいプロパティまたはメソッドを追加する以外に、既存のプロパティまたはメソッドの動作を変更、つまりオーバーライドすることもできます。

たとえば、StartEngine メソッドを含む Car クラスから派生した Truck クラスを作成できます。Truck がディーゼル エンジンを使用する場合、エンジンをかけるプロセスは、Car の場合とは異なります。この場合、Truck に合わせて StartEngine メソッドをオーバーライドすることになります。

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

既定では、クラスのプロパティとメソッドはオーバーライドできません。派生クラスでプロパティまたはメソッドをオーバーライドできるようにするには、Overridable キーワードを使用してプロパティまたはメソッドを宣言して、オーバーライド可能としてマークする必要があります。

Public Overridable Property EngineType As String

Public Overridable Sub StartEngine(ByVal EngineType As String)

基本クラスから継承する場合、Overridable としてマークされたプロパティとメソッドはそのまま使用することも、Overrides キーワードを使用して宣言することで要件に合わせて変更することもできます。

Public Overrides Property EngineType As String

Public Overrides Sub StartEngine(ByVal EngineType As String)

前のレッスンで作成した Players クラスでは、FullName メソッドをオーバーライドして、選手の背番号も名前に含め、さらにミドル ネームを返すコードを削除できます。

やってみよう

FullName メソッドをオーバーライドするには

  1. 前のレッスンで作成した Persons プロジェクトを開きます。プロジェクトを保存しなかった場合は、前のレッスン「既存クラスからのクラスの構築 : 継承を使用する」に戻り、手順を完了します。

  2. ソリューション エクスプローラで Persons.vb ノードをクリックし、[表示] メニューの [コード] をクリックします。

  3. コード エディタで、FullName メソッドの宣言を次のように変更します。

    Public Overridable Function FullName() As String
    
  4. ソリューション エクスプローラで、Players.vb ノードをクリックし、[表示] メニューの [コード] をクリックします。

  5. コード エディタで、次のコードをクラスに追加します。

    Public Overrides Function FullName() As String
        FullName = FirstName & " " & LastName & ", #" & numberValue
    End Function
    
  6. ソリューション エクスプローラで、PlayerTest プロジェクトの Form1.vb ノードを選択して、[表示] メニューの [コード] をクリックします。

  7. コード エディタで、Button1_Click イベント コードを次のように変更します。

    MsgBox(player1.Position & " " & player1.FullName & _
          " is now at bat.")
    
  8. Button2_Click イベント コードを次のように変更します。

    MsgBox(player2.Position & " " & player2.FullName & _
          " is on deck.")
    
  9. F5 キーを押してプログラムを実行し、各ボタンをクリックして結果を確認します。

    オーバーライドされた FullName メソッドを使用していても、結果は前と同じです。

  10. [ファイル] メニューの [すべてを保存] をクリックします。

次の手順

このレッスンでは、メソッドをオーバーライドする方法について説明しました。次のレッスンでは、コレクションを使用して類似したオブジェクトのグループを管理する方法について説明します。

次のレッスン : 「コレクションを使用して複数のオブジェクトを管理する

参照

処理手順

既存クラスからのクラスの構築 : 継承を使用する

参照

Overridable

Overrides