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