我这个学期开始学习VB.NET课程已经有一段时间了,因为我在VB.NET中做了什么,我意识到我已经忘记了一些基础知识。在下面的示例程序中,我不需要将exampleVar传递给函数以便能够更改该值。为什么这样,我做错了什么?
Public Class Form1
Dim exampleVar As Integer = 0
Sub MySub()
exampleVar = 123
End Sub
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MySub()
TextBox1.Text = exampleVar
End Sub
End Class
文本框显示值123
答案 0 :(得分:1)
首先关闭......
Dim exampleVar As Integer = 0
上面的代码声明只比Class Form1低1级,这意味着,它是一个全局变量,Class Form1下面的任何子类都可以访问和使用。
Sub MySub()
exampleVar = 123
End Sub
上面的代码是一个Sub,它将exampleVar设置为123。
最后......当你的表单加载时,你调用将exampleVar等于123的Sub,之后,TextBox1.Text等同于exampleVar所持有的值123,因此它显示123.
如果那是你想要的,你没有做错任何事。如果您不想将exampleVar设置为123,请从Form_Load事件中删除MySub()。
答案 1 :(得分:0)
exampleVar
是全局变量,其值等于0.在显示之前,您将使用MySub()
方法更新它。
答案 2 :(得分:0)
因此,在您的示例中,变量声明位于类的“范围”内。这使得它可以访问同样位于类范围内的任何其他内容。
如果声明发生在MySub()内,例如:
Public Sub MySub()
Dim exampleVar As Integer = 0
exampleVar = 123
End Sub
它在MySub范围之外是不可访问的,此时你可能不得不开始传递它,但一般记住,如果你这样做,你将主要通过'ByVal'或者按值传递。这意味着:
Public Sub MySub(ByVal arg As Integer)
arg = 123
End Sub
调用此方法时不会影响原始变量,如:
Dim exampleVar As Integer = 0
...
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
MySub(exampleVar)
TextBox1.Text = exampleVar
End Sub
在这个例子中,exampleVar仍然是0 - 我认为这是你期望的效果。
当对象传递ByVal时,它们的值将被传入,但不会传入原始对象。要以这种方式影响原始变量,可以使用ByRef,它通过“引用”传入对象。