Static (Visual Basic)

更新 : 2007 年 11 月

1 つ以上のローカル変数が、それらが宣言されたプロシージャの終了後も存在し続け、最後に設定された値を保持することを指定します。

解説

通常、プロシージャ内のローカル変数は、プロシージャが停止した直後に削除されます。静的変数はプロシージャの終了後も存在し続け、最後に設定された値を保持します。次回、コードからそのプロシージャを呼び出したとき、変数は初期化し直されることなく、最後に割り当てられた値をそのまま保持します。静的変数は、自らが定義されたクラスやモジュールの有効期間中存在し続けます。

規則

  • 宣言コンテキストStatic はローカル変数にのみ使用できます。つまり、Static 変数は、プロシージャまたはプロシージャ内のブロックのコンテキストで宣言される必要があり、ソース ファイル、名前空間、クラス、構造体、またはモジュールのコンテキストでは宣言できません。

    Static は、構造体のプロシージャの内部では使用できません。

  • Static ローカル変数のデータ型は推論できません。詳細については、「ローカル型の推論」を参照してください。

  • 修飾子の結合 同じ宣言内で Static を ReadOnly、Shadows、または Shared と共に指定することはできません。

動作

ローカル変数の動作は、それが Shared プロシージャに宣言されているかどうかによって変わります。プロシージャが Shared であれば、そのすべてのローカル変数が自動的に共有されます。これには、Static 変数が含まれます。このような変数は、アプリケーション全体で 1 つしか作成されません。Shared プロシージャはクラス名を使って呼び出してください。クラスのインスタンスをポイントする変数を使って呼び出すことはできません。

プロシージャが Shared でなければ、そのローカル変数はインスタンス変数になります。これには、Static 変数が含まれます。クラスの各インスタンスに独自の変数が作成されます。共有でないプロシージャは、クラスの特定のインスタンスをポイントする変数を使って呼び出してください。そのインスタンス内の変数は、別のインスタンス内の同じ名前を持つ変数とは独立したものです。したがって、これらの変数には異なる値を格納できます。

使用例

次の例は Static の使い方を示しています。

Function updateSales(ByVal thisSale As Decimal) As Decimal
    Static totalSales As Decimal = 0
    totalSales += thisSale
    Return totalSales
End Function

Static 変数 totalSales は、一度だけ 0 に初期化されます。updateSales を何度入力しても、totalSales は最後に計算された値をそのまま保持します。

Static 修飾子は次の構文で使用します。

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

参照

概念

Visual Basic における有効期間

Visual Basic での変数宣言

ローカル型の推論

参照

Shadows

Shared (Visual Basic)

その他の技術情報

構造体 : 独自のデータ型

クラスについて