VB.net byval和byref

概述

       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的结果如下图


 

你可能感兴趣的:(VB.NET)