变量的作用范围

在代码的任何位置,我们都可以用Dim语句定义变量,但是不同位置定义的变量,其作用范围是不同的。

变量的作用范围原理如下:如果在流程语句之内定义的,则只在该流程语句之内以及嵌套的子流程语句内有效,如果在流程语句之外定义的,则在该段代码的任何位置有效。

下面我们通过一些例子来说明上述原理,这些代码本身没有意义,甚至显得非常冗余,但是可以很好地说明问题:

示例一

下面的代码能够正常执行:

Dim m As Integer 'm在流程语句之外,在任何位置可以使用
If
m > 0 Then
    Dim
n As integer 'n在流程语句之内定义,只能在本流程内使用
    n =
1 '使用n
    m = n +
1 '使用m和n
End If

m = m *
2
'使用m

示例二

下面的会报错,问题出在最后一行代码,因为变量n是在If语句内定义的,不能在If语句之外使用:

Dim m As Integer 'm在流程语句之外,在任何位置可以使用
If
m > 0 Then
    Dim
n As integer 'n在流程语句之内定义,只能在本流程内使用
    n =
1 '使用n
    m = n +
1 '使用m和n
End If

m = m *
2 '使用m
n = n *
2 '这会导致代码出错,因为变量n不能在这里使用

下面的代码也会报错,问题同样出在最后一行:

Dim m As Integer = 100
If
m > 100 Then
    Dim
n As Integer
    n = m *
2
Else
    Dim
n As Integer = 20
    n = n + m

End If

n
= n + 1 '这里会出错,因为变量n不能在这里使用。

如果要在If语句之外使用变量,必须在If语句之前定义好:

Dim m As Integer = 100
Dim
n As Integer
If
m > 100 Then
   
n = m * 2
Else
   
n = 20
   
n = n + m
End If

n = n +
1
m = n + 100

上面的代码,由于变量n和m是在if语句之前定义的,所以在if语句之内和之外,都能使用这两个变量。

示例三

下面的语句在执行过程中会报错:

Dim Sum As Integer
For
i As Integer = 0 To 100
   
Sum = Sum + i
Next

Output.Show(Sum / i)
'这里会出错,变量i不能在这里出现

这是因为变量i是在语句For中定义的,所以只能在循环语句(For...Next)中使用,最后一行代码位于循环语句之外,却使用了变量i,所以会报错,错误提示为“变量i未申明”。

如果某个变量在循环语句之内和之外都要使用,那么应该在循环语句之前定义好变量,例如:

Dim Sum As Integer
Dim
i As Integer
For
i = 0 To 100
    Sum = Sum + i
Next

Output.Show(Sum / i)

上面的代码中,变量Sum和i是在循环语句之前定义的,所以在循环语句之内和之外都可以使用。

示例四

不同的流程语句内,可以定义同名的变量,例如在下面的代码中,我们在四个地方定义了名称为n的变量:

Dim m As Integer = 5
If
m > 0 Then
    Dim
n As Integer
    n =
1
Else
    Dim
n As Integer
    n =
10
End
If
Select Case
m
    Case
1,3,5,7,8
       
Dim n As Integer = 1
        m = n

    Case
2,4,6,8,10
       
Dim n As Integer = 1
        m =
2
End Select

Messagebox.Show(IIF(m =
1,"奇数","偶数"
))

实际使用的时候,如果某一个变量需要在不同的流程中使用,应该直接在流程外定义,如果某个变量只在流程内使用,那么就应该在该流程内定义。

示例五

在流程语句之内定义的变量,可以在子流程内使用,例如下面的代码中,变量n是在If语句中定义的,在嵌套的子流程Select Case语句中也使用了该变量:

Dim m As Integer = 1
If
m > 0 Then
    Dim
n As Integer
    n =
1
   
Select Case m
       
Case 1,3,5,7,8
            n =
1
       
Case 2,4,6,8,10
            n =
2
   
End Select
    Messagebox.Show(IIF(n =
1,"奇数","偶数"))
End If

示例六

流程内和流程外,不能有同名的变量,例如下面的代码会出现错误,这是因为变量n同时在流程内和流程外定义了:

Dim m As integer
Dim
n As Integer
If
n > 0 Then
    Dim n As integer '这里会出错
    m =
1
End If


本页地址:http://www.foxtable.com/webhelp/topics/1518.htm