Class ステートメント (Visual Basic)

クラスの名前を宣言し、クラスを構成する変数、プロパティ、イベント、およびプロシージャの定義を示します。

構文

[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ MustInherit | NotInheritable ] [ Partial ] _  
Class name [ ( Of typelist ) ]  
    [ Inherits classname ]  
    [ Implements interfacenames ]  
    [ statements ]  
End Class  

指定項目

用語 定義
attributelist 任意。 「属性リスト」を参照してください。
accessmodifier 任意。 次のいずれかの値を指定します。

- Public
- Protected
- Friend
- Private
- Protected Friend
- Private Protected

Access levels in Visual Basic」を参照してください。
Shadows 任意。 「Shadows」を参照してください。
MustInherit 任意。 「MustInherit」を参照してください。
NotInheritable 任意。 「NotInheritable」を参照してください。
Partial 任意。 クラスの部分定義を示します。 「Partial」を参照してください。
name 必須です。 このクラスの名前です。 「 Declared Element Names」を参照してください。
Of 任意。 これがジェネリック クラスであることを指定します。
typelist Of キーワードを使用する場合は必須です。 このクラスの型パラメーター リストを指定します。 「型リスト」を参照してください。
Inherits 任意。 このクラスが別のクラスのメンバーを継承することを示します。 「Inherits ステートメント」を参照してください。
classname Inherits ステートメントを使用する場合は必ず指定します。 このクラスの派生元のクラスの名前です。
Implements 任意。 このクラスが 1 つ以上のインターフェイスのメンバーを実装していることを示します。 「Implements ステートメント」を参照してください。
interfacenames Implements ステートメントを使用する場合は必ず指定します。 このクラスが実装するインターフェイスの名前です。
statements 任意。 このクラスのメンバーを定義するステートメントです。
End Class 必須です。 Class の定義を終了します。

Remarks

Class ステートメントは新しいデータ型を定義します。 クラスは、オブジェクト指向プログラミング (OOP) の基本的な構成要素です。 詳細については、オブジェクトとクラスに関するページを参照してください。

Class は、名前空間またはモジュール レベルでのみ使用できます。 つまり、クラスの宣言コンテキストは、ソース ファイル、名前空間、クラス、構造体、モジュール、またはインターフェイスのいずれかである必要があり、プロシージャまたはブロックでは宣言できません。 詳細については、「宣言コンテキストと既定のアクセス レベル」を参照してください。

クラスの各インスタンスには、他のインスタンスに依存しない独自の有効期間があります。 この有効期間は、New Operator 句によって、または CreateObject などの関数によって作成された時点で開始されます。 これは、インスタンスを指すすべての変数が、Nothing、または他のクラスのインスタンスに設定された時点で終了します。

クラスは、既定で Friend アクセスに設定されます。 アクセス修飾子を使用してこれらのアクセス レベルを調整できます。 詳しくは、「Visual Basic でのアクセス レベル」を参照してください。

ルール

  • 入れ子。 クラスの内部に別のクラスを定義できます。 外側のクラスは、含まれているクラスと呼ばれ、内側のクラスは入れ子になったクラスと呼ばれます。

  • 継承。 クラスが Inherits ステートメントを使用する場合、指定できる基底クラスまたはインターフェイスは 1 つだけです。 クラスは複数の要素からは継承できません。

    クラスは、より制限の厳しいアクセス レベルを持つ別のクラスから継承することはできません。 たとえば、Public クラスは Friend クラスから継承できません。

    クラスは、その中の入れ子にされたクラスから継承できません。

  • 実装: クラスで Implements ステートメントを使用する場合、interfacenames に指定するすべてのインターフェイスによって定義されたすべてのメンバーを実装する必要があります。 この例外は、基底クラスのメンバーの再実装です。 詳細については、Implements に関するページの「再実装」を参照してください。

  • 既定のプロパティ。 クラスは、その既定のプロパティとして、最大で 1 つのプロパティを指定できます。 詳細については、「Default」を参照してください。

動作

  • アクセス レベル。 クラスの内部では、各メンバーを独自のアクセス レベルで宣言できます。 クラス メンバーは、既定で Private アクセスに設定される変数と定数を除き、既定で Public アクセスに設定されます。 クラスがそのメンバーのいずれかよりもアクセスが制限されている場合は、クラスのアクセス レベルが優先されます。

  • 範囲。 クラスは、そこに含まれる名前空間、クラス、構造体、またはモジュールをスコープとします。

    すべてのクラス メンバーのスコープは、クラス全体になります。

    [Lifetime](有効期間)。 Visual Basic では、静的クラスをサポートしていません。 静的クラスに相当する機能は、モジュールによって提供されます。 詳細については、「Module ステートメント」を参照してください。

    クラス メンバーの有効期間は、それを宣言する方法と場所で決まります。 詳しくは、「Visual Basic における有効期間」をご覧ください。

  • 修飾。 クラスの外側にあるコードでは、メンバーの名前をそのクラスの名前で修飾する必要があります。

    入れ子になったクラスの内側のコードでプログラミング要素を修飾なしで参照した場合、Visual Basic はその要素をまず入れ子になったクラスの内側で探し、その次に含まれているクラスの内側で探します。この手順が、最も外側のコンテナー要素にまで繰り返されます。

クラスとモジュール

これらの要素には多くの類似点がありますが、重要な相違点もいくつかあります。

  • 用語。 以前のバージョンの Visual Basic では、クラス モジュール (.cls ファイル) と標準モジュール (.bas ファイル) の 2 種類のモジュールを認識します。 現在のバージョンでは、これらのクラスモジュールをそれぞれ呼び出します。

  • 共有メンバー。 クラスのメンバーが共有メンバーかインスタンス メンバーかを制御できます。

  • オブジェクト指向。 クラスはオブジェクト指向ですが、モジュールはそうではありません。 クラスの 1 つ以上のインスタンスを作成できます。 詳細については、オブジェクトとクラスに関するページを参照してください。

次の例では、Class ステートメントを使用して 1 つのクラスといくつかのメンバーを定義します。

Class BankAccount
    Shared interestRate As Decimal
    Private accountBalance As Decimal
    Public holdOnAccount As Boolean = False

    Public ReadOnly Property Balance() As Decimal
        Get
            Return accountBalance
        End Get
    End Property

    Public Sub PostInterest()
        accountBalance = accountBalance * (1 + interestRate)
    End Sub

    Public Sub PostDeposit(ByVal amountIn As Decimal)
        accountBalance = accountBalance + amountIn
    End Sub

    Public Sub PostWithdrawal(ByVal amountOut As Decimal)
        accountBalance = accountBalance - amountOut
    End Sub
End Class

関連項目