PK
ByRef:
我们常说的传地址,也就是用一旦在使用过程中改变了引用的数值,那么原数值做相应的改变。可以说ByRef用的随波逐流。
ByVal:
所谓的传值;无论在使用过程中如何操练所引用的数值,原数值就不会有任何变化。ByVal用的刚正不阿啊。
举例:
例如A过程ByRef了一个值为10的a,若A过程在使用a的时候将a重新赋值为5,那么a的值就会变为5;而假若A过程ByVal了一个值为10的a,不管A过程在使用a的时候对a重新赋值多少次,a的值都会保持10不变。
代码
ByRef
<span style="font-family:KaiTi_GB2312;font-size:24px;"> Sub ByR(ByRef x As Integer)
x = 1
End Sub
Private Sub btnByRef_Click(sender As Object, e As EventArgs) Handles btnByRef.Click
Dim a As Integer = 5
ByR(a)
txtByRef.Text = a
End Sub</span>
ByVal
<span style="font-family:KaiTi_GB2312;font-size:24px;"> Sub ByV(ByVal x As Integer)
x = 1
End Sub
Private Sub btnByVal_Click(sender As Object, e As EventArgs) Handles btnByVal.Click
Dim a As Integer = 5
ByV(a)
txtByVal.Text = a
End Sub</span>
结果
小结
通过结果可以看到,我们在将a=5传入参数传递方式为ByRef的过程中后将地址一并传入,从而导致自身的值被改为ByR中的1;
而在将a=5传入参数传递方式为ByVal的过程中后只是将值传入,并没有将自身的值改为ByV中的1。
如果要想保护参数的安全性,建议使用ByVal;而若进行数据导入导出时建议ByRef。
感谢您的宝贵时间,祝您生活愉快。
——joker