VB2010中什么时候用byval

Public Class Form1
Private Sub test(ByVal a As Integer)
a = 99 + 1

End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i, b As Integer
Call test(i)
TextBox1.Text = CStr(i)
End Sub
End Class

这段代码运行后TextBox1里显示的值是0,而不是100。

ByVal就是传值调用,就是把变量的值作为参数传送到子过程中,子过程内部对这个参数进行任何修改都不会影响到原变量的值。
而把ByVal去掉或者改为ByRef则是传址调用,就是把变量的内存地址作为参数传送到子过程中,那么子过程内部对这个内存地址进行赋值就相当于直接给原来那个变量赋值,这样原变量的值就会跟着改变。
你这段代码如果想得到100的结果,就要把test子过程的参数a的调用方式改为传址,也就是去掉ByVal即可。

补充:当你不希望子过程改变原变量(或者说实参)的值时,子过程的参数(或者说形参)采用ByVal(传值)调用方式;反之则要采用ByRef(传址)调用方式。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-09-11
Public Class Form1
    Private Sub test(Byref a As Integer) 'byval 传值 不改变原值
        a = 99 + 1

    End Sub
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i, b As Integer
        Call test(i)
        TextBox1.Text = CStr(i)
    End Sub
End Class

相似回答