次の方法で共有


方法: 変数のスコープを制御する (Visual Basic)

通常、変数は スコープ内にあるか、宣言するリージョン全体で参照可能です。 場合によっては、変数の アクセス レベル がそのスコープに影響を与える可能性があります。

詳細については、「 Visual Basic のスコープ」を参照してください。

ブロック レベルまたはプロシージャ レベルでのスコープ

ブロック内でのみ変数を表示するには

  • 変数の Dim ステートメントを、そのブロックの開始宣言ステートメントと終了宣言ステートメントの間 (たとえば、For ループのForステートメントとNextステートメントの間) に配置します。

    変数は、ブロック内からのみ参照できます。

プロシージャ内でのみ変数を表示するには

  • 変数の Dim ステートメントをプロシージャ内に配置しますが、任意のブロック ( With...End With ブロックなど) の外側に配置します。

    変数を参照できるのは、プロシージャ内から (プロシージャに含まれる任意のブロック内を含む) からのみです。

モジュールレベルまたは名前空間レベルでのスコープ

便宜上、単一用語 モジュール レベル は、モジュール、クラス、および構造体に等しく適用されます。 モジュール レベル変数のアクセス レベルによって、そのスコープが決まります。 モジュール、クラス、または構造体を含む名前空間もスコープに影響します。

モジュール、クラス、または構造体全体で変数を表示するには

  1. 変数の Dim ステートメントは、モジュール、クラス、または構造体内に配置しますが、プロシージャの外側に配置します。

  2. Dim ステートメントに Private キーワードを含めます。

  3. 変数は、モジュール、クラス、または構造体内のどこからでも参照できますが、外部からは参照できません。

名前空間全体で変数を表示するには

  1. 変数の Dim ステートメントは、モジュール、クラス、または構造体内に配置しますが、プロシージャの外側に配置します。

  2. Dim ステートメントに Friend キーワードまたは Public キーワードを含めます。

  3. モジュール、クラス、または構造体を含む名前空間内の任意の場所から変数を参照できます。

次の例では、モジュール レベルで変数を宣言し、その可視性をモジュール内のコードに制限します。

Module demonstrateScope  
    Private strMsg As String  
    Sub initializePrivateVariable()  
        strMsg = "This variable cannot be used outside this module."  
    End Sub  
    Sub usePrivateVariable()  
        MsgBox(strMsg)  
    End Sub  
End Module  

前の例では、モジュール demonstrateScope で定義されているすべてのプロシージャで、 String 変数 strMsgを参照できます。 usePrivateVariable プロシージャが呼び出されると、ダイアログ ボックスにstrMsg文字列変数の内容が表示されます。

前の例に対する次の変更により、 strMsg 文字列変数は、その宣言の名前空間内の任意の場所のコードで参照できます。

Public strMsg As String  

堅牢なプログラミング

変数のスコープが狭いほど、同じ名前の別の変数の代わりに誤って参照する機会が少なくなります。 参照照合の問題を最小限に抑えることもできます。

.NET Framework のセキュリティ

変数のスコープが狭いほど、悪意のあるコードで不適切な使用を行う可能性が小さくなります。

こちらも参照ください