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

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

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

指定項目

語句

定義

attributelist

省略可能です。 「属性リスト」を参照してください。

accessmodifier

省略可能です。 次のいずれかの値を指定します。

Visual Basic でのアクセス レベル」を参照してください。

Shadows

省略可能です。 「Shadows」を参照してください。

MustInherit

省略可能です。 「MustInherit (Visual Basic)」を参照してください。

NotInheritable

省略可能です。 「NotInheritable (Visual Basic)」を参照してください。

Partial

省略可能です。 クラスの部分定義であることを示します。 「Partial (Visual Basic)」を参照してください。

name

必ず指定します。 このクラスの名前です。 「宣言された要素の名前 (Visual Basic)」を参照してください。

Of

省略可能です。 これがジェネリック クラスであることを指定します。

typelist

Of キーワードを使用する場合は必ず指定します。 このクラスの型パラメーターの一覧を指定します。 「型リスト」を参照してください。

Inherits

省略可能です。 このクラスが他のクラスのメンバーを継承することを示します。 「Inherits ステートメント」を参照してください。

classname

Inherits ステートメントを使用する場合は必ず指定します。 このクラスの派生元となるクラスの名前です。

Implements

省略可能です。 このクラスが、1 つ以上のインターフェイスのメンバーを実装していることを示します。 「Implements ステートメント」を参照してください。

interfacenames

Implements ステートメントを使用する場合は必ず指定します。 このクラスが実装するインターフェイスの名前を指定します。

statements

省略可能です。 このクラスのメンバーを定義するステートメントを指定します。

End Class

必ず指定します。 Class 定義を終了します。

解説

Class ステートメントは新しいデータ型を定義します。 クラスはオブジェクト指向プログラミング (OOP: Object-Oriented Programming) の基本的なビルド ブロックです。 詳細については、「Visual Basic のオブジェクトとクラス」を参照してください。

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

クラスの各インスタンスは、他のインスタンスからは独立した有効期間を持ちます。 インスタンスの有効期間は、New 演算子 (Visual Basic) 句または CreateObject などの関数で作成されたときに開始します。 インスタンスを参照している変数がすべて Nothing (Visual Basic) に設定されるか、他のクラスのインスタンスに設定されると、インスタンスの有効期間は終了します。

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

規則

  • 入れ子。 クラス内に別のクラスを定義できます。 外側のクラスは包含クラス、内側のクラスは入れ子クラスと呼ばれます。

  • 継承。 クラスが Inherits ステートメントを使用している場合は、1 つの基本クラスまたはインターフェイスのみを指定できます。 複数の要素を継承することはできません。

    自分よりもアクセス レベルの厳しいクラスは継承できません。 たとえば、Public クラスは Friend クラスを継承できません。

    中に入れ子になったクラスは継承できません。

  • 実装。 クラスが Implements ステートメントを使用している場合は、interfacenames に指定したすべてのインターフェイスで定義されているメンバーをすべて実装する必要があります。 ただし、基本クラスのメンバーを再実装する必要はありません。 詳細については、「Implements 句 (Visual Basic)」の「再実装」を参照してください。

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

動作

  • アクセス レベル。 クラス内では、それぞれのメンバーにアクセス レベルを宣言できます。 変数と定数を除くクラス メンバーは既定で Public (Visual Basic) アクセスになります。変数と定数は既定で Private (Visual Basic) アクセスになります。 クラスのアクセス レベルの方がメンバーのアクセス レベルよりも厳しいときは、クラスのアクセス レベルが優先されます。

  • スコープ。 クラスのスコープは、そのクラスを含んでいる名前空間、クラス、構造体、またはモジュールになります。

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

    有効期間。 Visual Basic は静的クラスをサポートしません。 静的クラスと同等の機能はモジュールで実現されます。 詳細については、「Module ステートメント」を参照してください。

    クラス メンバーの有効期間は、宣言された方法と場所によって左右されます。 詳細については、「Visual Basic における有効期間」を参照してください。

  • 修飾。 クラス外部のコードがメンバーにアクセスするときには、メンバー名をクラス名で修飾する必要があります。

    入れ子クラスの内部のコードがプログラミング要素に対する非修飾参照を行った場合、Visual Basic は目的の要素をまず入れ子クラス内で検索し、次にそのコンテナー クラス内で検索し、同様にして一番外側のコンテナー要素まで検索します。

クラスとモジュール

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

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

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

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

使用例

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

Class bankAccount
    Shared interestRate As Decimal
    Private accountNumber As String
    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

参照

処理手順

方法: ジェネリック クラスを使用する (Visual Basic)

参照

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

Module ステートメント

Property ステートメント

概念

Visual Basic のオブジェクトとクラス

構造体とクラス (Visual Basic)

オブジェクトの有効期間: オブジェクトの作成と破棄 (Visual Basic)

Visual Basic におけるジェネリック型 (Visual Basic)