MustInherit (Visual Basic)

クラスが基本クラスとしてのみ使用でき、オブジェクトを直接作成できないことを示します。

解説

基本クラス (抽象クラス とも呼ばれます) の目的は、ここから派生したすべてのクラスに共通した機能を定義することです。 これにより、派生クラスが共通の要素を再定義する必要がなくなります。 有用なオブジェクトを作成するために、この共通の機能では十分でない場合は、派生クラスがそれぞれ足りない機能を定義します。 この場合、使用する側のコードでは、派生クラスからのみオブジェクトを作成できるようにすると便利です。 これを実現するには、基本クラスで MustInherit を使用します。

また、MustInherit クラスを使用して、変数を関連するクラスのみに制限できます。 基本クラスを定義し、これらの関連するクラスをすべてここから派生させます。 基本クラスでは、すべての派生クラスに共通の機能を定義する必要はなく、変数に値を割り当てる際のフィルターとして機能させることができます。 使用する側のコードで、変数を基本クラスとして宣言すると、その変数には、いずれかの派生クラスのオブジェクトだけを割り当てることができるようになります。

.NET Framework では、いくつかの MustInherit クラスが定義されています。たとえば、ArrayEnumValueType などです。 ValueType は、変数を制限する基本クラスの 1 つです。 すべての値型は ValueType から派生します。 変数を ValueType として宣言すると、その変数には値型のみを割り当てられます。

規則

  • 宣言コンテキスト。 MustInherit は、Class ステートメントでのみ使用できます。

  • 修飾子の結合。 同じ変数宣言で MustInherit と NotInheritable を同時に指定することはできません。

使用例

次の例では、強制的な継承と強制的なオーバーライドを示します。 基本クラス shape は、変数 acrossLine を定義します。 circle クラスと square クラスは、shape から継承されます。 これらのクラスは、acrossLine の定義を継承しますが、図形の種類によって計算が異なるため、area 関数を定義する必要があります。

Public MustInherit Class shape
    Public acrossLine As Double
    Public MustOverride Function area() As Double
End Class
Public Class circle : Inherits shape
    Public Overrides Function area() As Double
        Return Math.PI * acrossLine
    End Function
End Class
Public Class square : Inherits shape
    Public Overrides Function area() As Double
        Return acrossLine * acrossLine
    End Function
End Class
Public Class consumeShapes
    Public Sub makeShapes()
        Dim shape1, shape2 As shape
        shape1 = New circle
        shape2 = New square
    End Sub
End Class

shape1 と shape2 は、shape 型として定義できます。 ただし、shape からオブジェクトを作成することはできません。area 関数の機能がないことと、MustInherit とマークされているためです。

クラスが shape として宣言されているので、変数 shape1 と shape2 は派生クラス circle および square のオブジェクトに限定されます。 Visual Basic では、高いレベルのタイプ セーフを実現するために、その他のオブジェクトをこれらの変数に割り当てることはできません。

使用法

MustInherit 修飾子は、次の場合に使用できます。

Class ステートメント

参照

参照

Inherits ステートメント

NotInheritable (Visual Basic)

概念

継承の基本 (Visual Basic)

その他の技術情報

キーワード (Visual Basic)