MustInherit
更新 : 2007 年 11 月
クラスが基本クラスとしてのみ使用でき、オブジェクトを直接作成できないことを示します。
解説
基本クラス (抽象クラス とも呼ばれます) の目的は、ここから派生したすべてのクラスに共通した機能を定義することです。これにより、派生クラスが共通の要素を再定義する必要がなくなります。有用なオブジェクトを作成するために、この共通の機能では十分でない場合は、派生クラスがそれぞれ足りない機能を定義します。この場合、使用する側のコードでは、派生クラスからのみオブジェクトを作成できるようにすると便利です。これを実現するには、基本クラスで MustInherit を使用します。
また、MustInherit クラスを使用して、変数を関連するクラスのみに制限できます。基本クラスを定義し、これらの関連するクラスをすべてここから派生させます。基本クラスでは、すべての派生クラスに共通の機能を定義する必要はなく、変数に値を割り当てる際のフィルタとして機能させることができます。使用する側のコードで、変数を基本クラスとして宣言すると、その変数には、いずれかの派生クラスのオブジェクトだけを割り当てることができるようになります。
.NET Framework では、いくつかの MustInherit クラスが定義されています。たとえば、Array、Enum、ValueType などです。ValueType は、変数を制限する基本クラスの 1 つです。すべての値型は ValueType から派生します。変数を ValueType として宣言すると、その変数には値型のみを割り当てられます。
ルール
宣言コンテキストMustInherit は、Class ステートメントでのみ使用できます。
修飾子の結合同じ変数宣言で NotInheritable と MustInherit を同時に指定することはできません。
使用例
次の例では、強制的な継承と強制的なオーバーライドを示します。基本クラス 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 修飾子は、次の場合に使用できます。