如何:控制变量的范围 (Visual Basic)
变量在你声明它的整个区域内都处于范围内,或者可见以供引用。 在某些情况下,变量的访问级别会影响其范围。
有关详细信息,请参阅 Scope in Visual Basic。
块级别或过程级别的范围
使变量仅在块中可见
将变量的 Dim 语句 置于该块的启动和终止声明语句之间,例如
For
循环的For
和Next
语句之间。只能从块内引用变量。
使变量仅在过程中可见
将变量的
Dim
语句置于过程内部但在任何块(例如With
...End With
块)之外。只能从过程内引用变量,包括过程中包含的任何块内。
模块级别或命名空间级别的范围
为方便起见,单个术语“模块级别”同样适用于模块、类和结构。 模块级别变量的访问级别确定其范围。 包含模块、类或结构的命名空间也会影响范围。
使变量在整个模块、类或结构中可见
将变量的
Dim
语句置于模块、类或结构内,但不要置于任何过程中。在
Dim
语句中包含 Private 关键字。可从模块、类或结构中的任何位置引用变量,但不能从其外部引用该变量。
使变量在整个命名空间中可见
示例
以下示例在模块级别声明了一个变量,并将其可见性限制到模块内的代码。
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 安全性
变量的范围越窄,恶意代码不当使用它的可能性就越小。