次の方法で共有


継承 (Visual Basic 6.0 ユーザー向け)

更新 : 2007 年 11 月

継承を使うと、既存のクラスから新しいクラスを作成できます。継承は、複数のクラスを関連付ける構造を提供することにより、アプリケーションの設計を単純化できます。また、新しいクラスの動作またはそれまでとは異なるクラスの動作だけを記述すればよいので、コードを再利用することもできます。

インターフェイスの継承

Visual Basic 6.0

Visual Basic 6.0 は、インターフェイスの継承をサポートします。詳細については、「インターフェイスの変更点 (Visual Basic 6.0 ユーザー向け)」を参照してください。

Visual Basic 2008

Visual Basic 2008 は、インターフェイスの継承を Interface ステートメント (Visual Basic) および Implements ステートメント でサポートします。インターフェイスの詳細については、「Visual Basic におけるインターフェイス」を参照してください。

実装の継承

実装の継承を使って新しいクラスを作成すると、基本クラスのすべてのメンバと実装が自動的に新しいクラスに与えられます。既存のクラスは、"基本クラス" と呼ばれます。新しいクラスは、"派生クラス" です。このクラスには、さらにメンバを追加できます。新しいクラスでコードを書くことにより、基本クラスの動作を変更できます。このテクニックは、オーバーライドと呼ばれています。

クラスを作成するには、以前に作成したクラス、プロジェクトに追加した参照内のクラス、または .NET Framework のオブジェクトを継承します。.NET Framework の多くのクラスは、継承によって関連付けられています。たとえば、TextBox クラスは、System.Windows.Forms.TextBoxBase クラスを継承します。

Visual Basic 6.0

Visual Basic 6.0 は、実装の継承をサポートしません。

Visual Basic 2008

Visual Basic 2008 では、Inherits ステートメントで継承を宣言します。次の例では、Oak 派生クラスは基本クラス Tree を継承します。

Public Class Oak
    Inherits Tree
    ' Add code here to extend or 
    ' modify the behavior of the Tree class.
End Class

MustInherit および NotInheritable

Visual Basic 6.0

Visual Basic 6.0 のインターフェイスの継承では、どのクラスもインターフェイス基本クラスとして動作できます。インターフェイス基本クラスとして動作しないようにクラスを設定する構文はありません。同様に、インターフェイス基本クラスとしてのみ動作するようにクラスを設定する構文もありません。

Visual Basic 2008

Visual Basic 2008 では、実装の継承と共に、MustInherit および NotInheritable という 2 つのクラス修飾子を定義します。これらの修飾子は、アプリケーション内の継承関係を制御するために使用できます。

クラス宣言の MustInherit 修飾子は、インスタンス化できないクラスであることを示します。

Public MustInherit Class BaseClass
End Class

つまり、New キーワードの後に BaseClass を記述できません。インスタンス化できるのは、BaseClass を継承し、MustInherit 修飾子のないクラスだけです。オブジェクト指向の専門書や他のオブジェクト指向言語では、MustInherit クラスは "抽象" クラスと呼ばれています。MustInherit クラスではないクラス (インスタンス化できるクラス) は、"具象" クラスと呼ばれています。

これと関連する概念として、シール クラス (基本クラスとして使用できないクラス) があります。このステータスを示すクラス定義上のキーワードは NotInheritable です。

Public NotInheritable Class DerivedClass
End Class

NotInheritable クラスは、継承の階層の末端に位置します。

詳細については、「Visual Basic の継承」を参照してください。

アップグレードのヒント

インターフェイスとして動作する Visual Basic 6.0 のクラスは、Visual Basic 2008 ではインターフェイスにアップグレードされます。次のような Visual Basic 6.0 の基本クラスと派生クラスがあるとします。

' Contents of class BaseClass
Public Sub BaseMethod()
End Sub

' Contents of class DerivedClass
Implements BaseClass
Private Sub BaseClass_BaseMethod()
End Sub

アップグレード ウィザードによるアップグレードで、次のコードが生成されます。

Option Strict Off
Option Explicit On
Interface _BaseClass
    Sub BaseMethod()
End Interface

Friend Class BaseClass
    Implements _BaseClass
    Public Sub BaseMethod() Implements _BaseClass.BaseMethod
    End Sub
End Class

Friend Class DerivedClass
    Implements _BaseClass
    Private Sub BaseClass_BaseMethod() Implements _BaseClass.BaseMethod
    End Sub
End Class

インターフェイスの代わりに継承を使って、アップグレードしたコードを次のように変更できます。

Friend Class BaseClass
    Public Sub BaseMethod()
        ' Add code here to define BaseMethod.
    End Sub
End Class

Friend Class DerivedClass
    Inherits BaseClass
End Class

これで、1 レベルの間接参照 (_BaseClass) が省かれます。また、1 つのメソッド定義 (BaseClass_BaseMethod) も省かれます。このメソッドは、基本クラスから継承されるので、コードを改めて記述する必要はありません。派生クラスの動作を変更する必要がある場合は、BaseMethod を次のようにオーバーライドできます。

Friend Class BaseClass
    Public Overridable Sub BaseMethod()
        ' Add code here to define BaseMethod.
    End Sub
End Class

Friend Class DerivedClass
    Inherits BaseClass
    Public Overrides Sub BaseMethod()
        ' Add code here to define behavior for DerivedClass.
    End Sub
End Class

アップグレードしたインターフェイスには、次のテクニックを使用できます。

  • Interface ステートメントを Inherits ステートメントで置き換えます。

  • 基本クラスを、インターフェイスを実装するクラスとして実装するのではなく、インターフェイスとして実装します。詳細については、「インターフェイスの変更点 (Visual Basic 6.0 ユーザー向け)」を参照してください。

  • 基本クラスを MustInherit クラスとして実装します。

  • 派生クラスを NotInheritable として実装します。

参照

その他の技術情報

Visual Basic の継承

Visual Basic におけるインターフェイス