为什么在函数中使用ByVal?

时间:2014-02-24 16:49:57

标签: vb.net

我对ByValByRef感到困惑。我在这里有这个代码:

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

2 个答案:

答案 0 :(得分:2)

因为正如您所指出的那样,传递ByVal更安全,函数上下文不会限制外部var变量的值。因此,您应该实际捕获函数结果,但不要期望在ByVal调用后更改变量值:

varResult = abcval(var)
MessageBox.Show(varResult)

答案 1 :(得分:0)

Byref按值传递,因此它实质上是在改变变量的值。如果在这种情况下使用ByVal,则需要将函数的值赋给变量。换句话说

var = abcval(var)