初学者Vb:可变范围的误解

时间:2012-10-06 23:02:22

标签: vb.net scope

好的,所以我开始学习vb并做了一些实验,直到我遇到了这个我无法理解的事情

所以我有一个带有两个模块的控制台应用程序

Module1.vb (程序从此开始)

Module Module1

    Sub Main()
        add.addone()
        add.addone()
        add.addone()
        Console.Read()
    End Sub

End Module

add.vb

Public Module add
    Private counter As Integer

    Public Sub addone()
        counter += 1
        Console.Write(counter)
    End Sub
End Module

我希望它能在控制台上打印出一种模式:

1 1 1

为什么要打印

1 2 3

我问这个是因为,我理解的是,在调用add.addone()之后。变量(计数器)不应该存在!所以当为第二次时间调用add.addone()时,它应该是空白的,因此再次打印出来。

我希望你能帮助我。我做错了什么,为什么会这样?

感谢, Vidhu

2 个答案:

答案 0 :(得分:1)

  

调用add.addone()之后。变量(计数器)应该不再存在!

为什么会这样? counteraddone的{​​{1}}外部声明为,位于周围的模块add中。所以当然即使在方法退出后它仍然存在。

(顺便提一下,您应该遵循模块和方法的.NET PascalCase命名约定......)

答案 1 :(得分:1)

这是因为变量计数器在一个不在Class内的Module中声明 当程序更改模块中的公共变量时,程序的任何其他部分都会获得相同的值。您不能像使用Class那样创建模块的实例,其中每个实例都有自己的内部变量副本。

请参阅Module vs Class