我正试图在Visual Studio中设置一个全局变量,但无法使其成为静态变量。有没有什么方法可以让我将变量设置为静态并在不同的方法之间共享,或者每次变量更改时都保存它?
您有两个选项:
1-创建一个包含共享变量的类(这与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"
如果您使用@Matt Wilko提供的数字1选项,您可以通过类的对象实例或通过引用没有对象引用的类来引用共享成员。两者都指向同一变量并递增,因此引用相同的值。尽管VisualStudio编译器提供了一个关于引用对象实例的警告,并表示不会对其进行评估,但它仍然进行编译。编译器建议使用类名。
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"