概述
byval是将实参所占的内存空间复制一份出来;byref是给实参另起一个别名,就好像是一个人两个名字。这两个的区别针对于一般的数据类型,大家都非常的清楚,但是,当用遇到对象类型的变量的时候,要小心了,因为,对象类型的变量里存放的是对象所占内存空间的首地址,此时,无论用byval还是byref,对该对象的内部成员的操作都是针对同一块内存空间。
实例
1、创建class1类,用户参数的传递用
Public Class Class1 '变量 Private _name As String '属性 Property name() As String '读操作 Get Return _name End Get '写操作 Set(ByVal value As String) _name = value End Set End Property End Class
2、创建class2类,用于对参数的处理
Public Class Class2 Public Sub tryd(ByRef classx As Class1) '通过形参修改 name classx.name = "这个是《形参》操作的地址空间" End Sub End Class
3、新建控制台应用程序,代码如下:
Module Module1 Sub Main() '定义class1类对象 进行参数的传递 Dim s As New Class1 s.name = "这个是《实参》操作的地址空间!" '定义class2类 逻辑运算 Dim X As New Class2 '执行参数 X.tryd(s) '输出 Console.WriteLine(s.name) '暂停画面 Console.ReadLine() End Sub End Module
运行3执行的结果如下图
byref中的实参和形参是一个人两个名称吗?
1、class1类和上面的一样
2、创建class2类,用来进行逻辑运算
Public Class Class2 Public Sub tryd(ByRef classx As Class1) '形参的对象中创建新的class1 Dim y As New Class1 '赋值 y.name = "一个人,两个名称" '给形参赋值 classx = y End Sub End Class
3、新建控制台应用程序
Module Module1 Sub Main() '定义class1类对象 进行参数的传递 Dim s As New Class1 '赋值 s.name = "不是同一个人,两个名称!" '定义class2类 逻辑运算 Dim X As New Class2 '执行 X.tryd(s) '输出实参的name属性 Console.WriteLine(s.name) '暂停画面 Console.ReadLine() End Sub End Module
执行3的结果如下图
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|