Share via


Visual Basic の共有メンバ

更新 : 2007 年 11 月

共有メンバは、1 つのクラスまたは構造体のすべてのインスタンスで共有されるプロパティ、プロシージャ、およびフィールドです。プログラミング言語によっては、静的メンバとも呼ばれます。

共有フィールドと共有プロパティ

インスタンスのいずれかに固有ではなく、クラスの一部となっている情報がある場合は、共有されたフィールドやプロパティが有効です。共有フィールドおよび共有プロパティの値を変更すると、クラスとそのクラスのすべてのインスタンスに関連付けられた値も変更されます。

一方、インスタンスのいずれかに関連付けられた非共有フィールドやプロパティの値を変更しても、同じクラスの他のインスタンスのフィールドやプロパティが影響を受けることはありません。非共有フィールドやプロパティは、クラスのインスタンスごとに独立して存在します。

このように、共有フィールドや共有プロパティは、クラスのインスタンスからだけ、またはクラス名で修飾することによってアクセスできる、グローバル変数のように動作します。共有フィールドや共有プロパティを使用せずに同じ機能を使用するには、モジュール レベルの変数を使用する必要があります。ただし、モジュール レベルの変数は、クラスの理解や保守を難しくする場合があります。また、モジュール レベルの変数をこのように使用すると、クラスが表現するカプセル化の概念に反することになります。

共有プロシージャ

共有プロシージャは、クラスの特定のインスタンスに関連付けられていないクラス メソッドです。たとえば、Math クラスで定義されている Cos メソッドは共有メソッドです。共有プロシージャは、オブジェクトのメソッドとして呼び出すか、クラスから直接呼び出すことができます。

共有プロシージャと共有プロパティは、そのクラスのインスタンスにはアクセスできません。このため、共有メソッドでは、非共有データ メンバには修飾参照だけが許可されています。

4hbsxy95.alert_note(ja-jp,VS.90).gifメモ :

クラスのインスタンス経由で共有メンバにアクセスするコードを作成するのはお勧めできません。これは、コンパイラが共有メンバの修飾を無視し、クラス経由で直接アクセスされているものとして扱うためです。一部のコードを実行するためにオブジェクトを修飾する場合も考えられるため、Visual Basic コンパイラは、クラスのインスタンス経由で共有メンバにアクセスしようとすると警告を表示します。IntelliSense では、クラスのインスタンスに対して共有メンバを表示しません。

共有メンバの例

次の例では、共有フィールド、2 つのインスタンス フィールド、および共有メソッドを作成して、コード中における共有メンバの動作を示します。

Public Class Item
    Public Shared Count As Integer = 1
    Public Shared Sub ShareMethod()
        MsgBox("Current value of Count: " & Count)
    End Sub

    Public Sub New(ByVal Name As String)
        ' Use Count to initialize SerialNumber.
        Me.SerialNumber = Count
        Me.Name = Name
        ' Increment the shared variable
        Count += 1
    End Sub
    Public SerialNumber As Integer
    Public Name As String
    Public Sub InstanceMethod()
        MsgBox("Information in the first object: " & _
            Me.SerialNumber & vbTab & Me.Name)
    End Sub
End Class

Sub TestShared()
    ' Create two instances of the class.
    Dim part1 As New Item("keyboard")
    Dim part2 As New Item("monitor")

    part1.InstanceMethod()
    part2.InstanceMethod()
    Item.ShareMethod()
End Sub

TestShared プロシージャを実行すると、クラスのインスタンスが 2 つ作成されます。コンストラクタは、共有フィールド Count を使用して、インスタンス フィールド SerialNumber を初期化し、Count をインクリメントします。このテクニックにより、各インスタンスに自動的に異なるシリアル番号が割り当てられます。

2 つのインスタンスを作成した後で、インスタンス メソッド InstanceMethod が両方のオブジェクトで呼び出され、共有メソッド ShareMethod も呼び出されます。出力は次のとおりです。

Information in the first object: 1 keyboard

Information in the second object: 2 monitor

Current value of the shared Count field: 3

参照

概念

構造体とクラス

参照

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

Cos

その他の技術情報

クラス、プロパティ、フィールド、およびメソッド

構造体 : 独自のデータ型