我对ByVal
和ByRef
感到困惑。我在这里有这个代码:
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim var As Integer = 2
abcref(var)
MessageBox.Show(var)
abcval(var)
MessageBox.Show(var)
End Sub
Function abcval(ByVal var)
var = var + 1
Return var
End Function
Function abcref(ByRef var)
var = var + 1
Return var
End Function
End Class
Byval
不执行我想要的计算,而是取Button_click
事件中的值。 ByRef
执行2+1 = 3
的正确计算。由于ByVal
被认为更安全,我如何在这里使用ByVal
?
答案 0 :(得分:2)
因为正如您所指出的那样,传递ByVal
更安全,函数上下文不会限制外部var
变量的值。因此,您应该实际捕获函数结果,但不要期望在ByVal
调用后更改变量值:
varResult = abcval(var)
MessageBox.Show(varResult)
答案 1 :(得分:0)
Byref
按值传递,因此它实质上是在改变变量的值。如果在这种情况下使用ByVal
,则需要将函数的值赋给变量。换句话说
var = abcval(var)