vb.net中的全局变量范围

时间:2017-01-08 11:22:54

标签: vb.net

我正在编写一个简单的程序来理解全局变量和计时器的范围。

Public Class Form1
    Dim gobalVar As Integer

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        globalVar = 0
    End Sub  

    Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
        Messagebox.Show(">" + globalVar.ToString)
        globalVar = 1
        Messagebox.Show("<" + globalVar.ToString)

    End Sub
End Class

我将计时器设置为5秒。 因此,当计时器触发时,globalVar为0,因为在表单加载时将其设置为0,然后在我将globalVar设置为1之后,消息框确认它打印&lt; 1 但是下次定时器触发时,消息框显示&gt; 0,由于某种原因,globalVar会回到0。

不应该将globalVar设为1,因为它是一个全局变量吗? 我是否正确地将globalVar声明为VB中的全局变量?

1 个答案:

答案 0 :(得分:4)

您的全局变量名为gobalVar,但您在计时器方法中使用的变量是globalVar。 VB.Net对未声明的变量宽容。它被称为Option Explicit,在这种情况下它是关闭的(我相信默认情况下)。

在您的情况下,每次计时器滴答时,局部变量globalVar将重新初始化为零。永远不会触及您的实际全局变量。尝试将Option Explicit On放在文件的顶部,然后您将收到编译器错误。它也可以在项目属性屏幕中的项目级别进行设置。

要么修复错误并重命名全局变量(或更新计时器滴答变量以匹配拼写错误)。

另请注意,这不是一个全局变量。它是Form1类中的实例变量。如果您创建了表单的另一个实例,它将拥有自己的变量实例。

要使其“真正”全球化(或者最接近它),可以将其置于模块中,也可以在Shared课程中将其设为Form1

有关“全局”变量的更多信息,请参阅this answer