MustInherit (Visual Basic)

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

Remarks

基底クラス (抽象クラスとも呼ばれます) の目的は、このクラスから派生したすべてのクラスに共通の機能を定義することです。 これにより、派生クラスで共通の要素を再定義する必要がなくなります。 場合によっては、この共通機能は使用可能なオブジェクトを作成するのに十分ではなく、各派生クラスで不足している機能が定義されます。 このような場合は、使用しているコードで派生クラスからのみオブジェクトを作成する必要があります。 これを適用するには、基底クラスで MustInherit を使用します。

MustInherit クラスのもう 1 つの用途は、変数を関連するクラスのセットに制限することです。 基底クラスを定義し、そこから関連するすべてのクラスを派生させることができます。 基底クラスがすべての派生クラスに共通する機能を提供する必要はありませんが、変数に値を代入するためのフィルターとして使用できます。 使用しているコードが変数を基底クラスとして宣言している場合は、Visual Basic によって、派生クラスのいずれかからその変数にオブジェクトのみを割り当てることができます。

.NET Framework は、ArrayEnumValueType などのいくつかの MustInherit クラスを定義します。 ValueType は、変数を制限する基底クラスの例です。 すべての値の型は ValueType から派生します。 変数を ValueType として宣言する場合は、その変数に値の型のみを割り当てることができます。

ルール

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

  • 結合された修飾子。 同じ宣言内で MustInheritNotInheritable と共に指定することはできません。

継承の強制とオーバーライドの強制の両方の例を次に示します。 基底クラス shapeacrossLine 変数を定義します。 クラス circle および squareshape から派生します。 これらは 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

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

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

使用方法

MustInherit 修飾子は、次のコンテキストで使用できます。

Class ステートメント

関連項目