声明全局静态变量

时间:2014-04-30 09:23:30

标签: vb.net static global-variables

我正在尝试在Visual Studio中设置一个全局变量,但我无法将其设置为静态。有没有办法让我将变量设置为静态并在不同的方法之间共享,或者每次更改时保存变量的某种方式?

2 个答案:

答案 0 :(得分:5)

您有两种选择:

1 - 创建一个包含Shared变量的类(这与c#中的静态变量相同)

    Public Class GlobalVariables
        Public Shared Bar As String
    End Class

然后,您可以使用类名称访问它:

GlobalVariables.Bar = "Hello world"

2 - 创建一个模块(这类似于c#中的静态类)

    Public Module GlobalVariables
        Public Bar As String
    End Module

然后,您可以使用以下代码访问此值:

Bar = "Goodbye cruel world"

答案 1 :(得分:0)

如果使用@Matt Wilko提供的数字1选项,则可以通过类的对象实例或引用没有对象引用的类来引用共享成员。两者都指向并增加相同的变量,因此引用相同的值。虽然,Visual Studio编译器提供了有关引用对象实例的警告,并表示它不会被评估,但它仍然可以编译。编译器的建议是使用类名。

Public Class GlobalVariables
    Public Shared Foo As Integer
End Class

将以下内容插入到表单中并从按钮单击事件过程调用IncrementIntegers(),您会发现myGlobalVariables.Foo和GlobalVariables.Foo都返回20。

Private Sub IncrementIntegers()
   Dim myGlobalVariables As New GlobalVariables
   myGlobalVariables.Foo = 0
   GlobalVariables.Foo = 0
   myGlobalVariables.Foo += 10
   GlobalVariables.Foo += 10
   Dim iLocalInt1 = myGlobalVariables.Foo 
   MessageBox.Show("myGlobalVariables.Foo = " & iLocalInt1.ToString)
   Dim iLocalInt2 = GlobalVariables.Foo 
   MessageBox.Show("GlobalVariables.Foo = " & iLocalInt2.ToString)
End Sub

请注意,对于选项1,Foo必须使用类名或对象名限定。对于选项2,它是一个模块而不是类,因此无法创建对象引用。除非在另一个模块中出现具有相同名称的变量,否则可以引用公共变量而不用模块名称对其进行限定,在这种情况下,编译器会抛出名称冲突错误。例如,

Public Module1

   Public Foo As String

End Module

Public Module2

   Public Foo As String

End Module

删除Module2和Foo可以在任何地方被称为不合格。

Foo = "Happy birthday"

当Module2存在时,Foo必须使用名称限定,因为它们都指向不同的变量并表示不同的独立值。

Module1.Foo = "Goodbye cruel world"
Module2.Foo = "Hello new world"