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

更新 : 2007 年 11 月

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

[ <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 を参照してください。

  • NotInheritable
    省略可能です。NotInheritable を参照してください。

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

  • name
    必ず指定します。このクラスの名前です。宣言された要素の名前 を参照してください。

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

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

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

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

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

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

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

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

解説

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

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

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

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

規則

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

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

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

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

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

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

動作

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

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

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

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

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

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

    入れ子クラスの内部のコードがプログラミング要素に対する非修飾参照を行った場合、Visual Basic は目的の要素をまず入れ子クラス内で検索し、次にそのコンテナ クラス内で検索し、同様にして一番外側のコンテナ要素まで検索します。詳細については、「同じ名前を持つ複数の変数がある場合に参照を解決する」を参照してください。

クラスとモジュール

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

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

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

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

使用例

次の例では、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 ステートメント

その他の技術情報

クラスについて