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

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

有关详细信息,请参阅 Visual Basic 中的范围

块级别或过程级别的范围

使变量仅在块中可见

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

    只能从块内部引用变量。

使变量仅在子程序内可见

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

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

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

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

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

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

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

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

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

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

  2. 语句中包含 FriendDim 关键字。

  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中定义的所有过程都可以引用变量StringstrMsgusePrivateVariable调用该过程时,它会在对话框中显示字符串变量strMsg的内容。

对前面的示例进行以下更改后,字符串变量 strMsg 可以通过代码在其声明的命名空间中的任何位置引用。

Public strMsg As String  

可靠的编程

变量的范围越窄,意外引用它来代替另一个同名变量的机会就越少。 还可以最大程度地减少引用匹配的问题。

.NET Framework 安全性

变量的范围越窄,恶意代码可能利用它的可能性越小。

另请参阅