Visual Basic における有効期間

更新 : 2007 年 11 月

宣言された要素の有効期間とは、その要素を使用できる期間です。変数は、有効期間がある唯一の要素です。このために、コンパイラでは、プロシージャ パラメータおよび関数の戻り値が、変数の特別な例として扱われます。変数の有効期間は、変数が値を保持できる期間を表します。保持されている値は変わっても、有効期間中は常になんらかの値が保持されています。

さまざまな有効期間

(プロシージャ外部の、モジュール レベルで宣言された) メンバ変数は、通常、宣言された要素と同じ有効期間を持っています。クラスまたは構造体で宣言された非共有変数は、宣言されたクラスまたは構造体の各インスタンスの別個のコピーとして存在します。そのような各変数は、インスタンスと同じ有効期間を持っています。ただし、共有 (Shared) 変数の有効期間は 1 つだけで、アプリケーションが終了するまで存続します。

(プロシージャの内部で宣言された) ローカル変数は、宣言されたプロシージャが実行されている間だけ存在します。そのプロシージャのパラメータ、および関数の戻り値についても同様です。ただし、プロシージャが他のプロシージャを呼び出した場合は、呼び出されたプロシージャの実行中もローカル変数の値は保持されます。

有効期間の開始

ローカル変数の有効期間は、宣言されたプロシージャの制御が開始されるときに始まります。すべてのローカル変数は、プロシージャの実行が開始されるとすぐに、データ型の既定値に初期化されます。プロシージャは、初期値を指定する Dim ステートメントを検出すると、コードで他の値が既に割り当てられていたとしても、その初期値をローカル変数に設定します。

構造体変数の各メンバは、独立した変数として初期化されます。同様に、配列変数の各要素も個別に初期化されます。

プロシージャ内部のブロック内で宣言された変数 (For ループなど) は、そのプロシージャへのエントリ時点で初期化されます。これらの初期化は、コードによってそのブロックが実行されるかどうかにかかわらず、有効になります。

有効期間の終了

プロシージャが終了すると、ローカル変数の値は保持されず、Visual Basic によってメモリが解放されます。次にプロシージャを呼び出すときに、すべてのローカル変数が再度作成され、再初期化されます。

クラスまたは構造体のインスタンスが終了すると、非共有変数はメモリおよび値を失います。クラスまたは構造体のそれぞれの新しいインスタンスによって、非共有変数が作成および再初期化されます。しかし、Shared 変数はアプリケーションが実行を停止するまで保持されます。

有効期間の延長

Static キーワードを持つローカル変数を宣言した場合、有効期間はプロシージャの実行時間よりも長くなります。Static 変数が存在する長さが、どのようにプロシージャ宣言によって決定されるのかを、次の表に示します。

プロシージャの場所および共有

静的変数の有効期間の開始

静的変数の有効期間の終了

モジュール内 (既定で共有)

プロシージャが最初に呼び出されたとき

アプリケーションの実行が停止されたとき

クラスまたは構造体の Shared (プロシージャはインスタンス メンバではありません)

特定のインスタンス、またはクラス名や構造体名自体のいずれかで、プロシージャが最初に呼び出されたとき

アプリケーションの実行が停止されたとき

Shared ではなく、クラスまたは構造体のインスタンス (プロシージャはインスタンス メンバではありません)

特定のインスタンスで、プロシージャが最初に呼び出されたとき

ガベージ コレクション (GC) に対して、インスタンスが解放されたとき

参照

処理手順

方法 : 変数の有効期間を延長する

データ型のトラブルシューティング

概念

宣言された要素の名前

Visual Basic におけるスコープ

Visual Basic でのアクセス レベル

Visual Basic における変数

Visual Basic での変数宣言

参照

Shared (Visual Basic)

Nothing (Visual Basic)

Static (Visual Basic)

その他の技術情報

宣言された要素の参照