如何:控制变量的范围 (Visual Basic)

变量在你声明它的整个区域内都处于范围内,或者可见以供引用。 在某些情况下,变量的访问级别会影响其范围。

有关详细信息,请参阅 Scope in Visual Basic

块级别或过程级别的范围

使变量仅在块中可见

  • 将变量的 Dim 语句 置于该块的启动和终止声明语句之间,例如 For 循环的 ForNext 语句之间。

    只能从块内引用变量。

使变量仅在过程中可见

  • 将变量的 Dim 语句置于过程内部但在任何块(例如 With...End With 块)之外。

    只能从过程内引用变量,包括过程中包含的任何块内。

模块级别或命名空间级别的范围

为方便起见,单个术语“模块级别”同样适用于模块、类和结构。 模块级别变量的访问级别确定其范围。 包含模块、类或结构的命名空间也会影响范围。

使变量在整个模块、类或结构中可见

  1. 将变量的 Dim 语句置于模块、类或结构内,但不要置于任何过程中。

  2. Dim 语句中包含 Private 关键字。

  3. 可从模块、类或结构中的任何位置引用变量,但不能从其外部引用该变量。

使变量在整个命名空间中可见

  1. 将变量的 Dim 语句置于模块、类或结构内,但不要置于任何过程中。

  2. Dim 语句中包含 FriendPublic 关键字。

  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 安全性

变量的范围越窄,恶意代码不当使用它的可能性就越小。

另请参阅