VB.net byval和byref

前端之家收集整理的这篇文章主要介绍了VB.net byval和byref前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

概述@H_502_2@

byval是将实参所占的内存空间复制一份出来;byref是给实参另起一个别名,就好像是一个人两个名字。这两个的区别针对于一般的数据类型,大家都非常的清楚,但是,当用遇到对象类型的变量的时候,要小心了,因为,对象类型的变量里存放的是对象所占内存空间的首地址,此时,无论用byval还是byref,对该对象的内部成员的操作都是针对同一块内存空间。@H_502_2@

实例@H_502_2@

1、创建class1类,用户参数的传递用@H_502_2@

@H_502_2@Public Class Class1
@H_502_2@'变量
@H_502_2@Private _name As String

@H_502_2@'属性
@H_502_2@Property name() As String
@H_502_2@'读操作
@H_502_2@Get
@H_502_2@Return _name
@H_502_2@End Get
@H_502_2@'写操作
@H_502_2@Set(ByVal value As String)
@H_502_2@_name = value
@H_502_2@End Set
@H_502_2@End Property
@H_502_2@End Class

@H_502_2@

2、创建class2类,用于对参数的处理@H_502_2@

@H_502_2@Public Class Class2
@H_502_2@Public Sub tryd(ByRef classx As Class1)
@H_502_2@'通过形参修改 name
@H_502_2@classx.name = "这个是《形参》操作的地址空间"
@H_502_2@End Sub
@H_502_2@End Class
@H_502_2@


@H_502_2@

3、新建控制台应用程序,代码如下:@H_502_2@

@H_502_2@Module Module1
@H_502_2@Sub Main()
@H_502_2@'定义class1类对象 进行参数的传递
@H_502_2@Dim s As New Class1
@H_502_2@s.name = "这个是《实参》操作的地址空间!"
@H_502_2@'定义class2类 逻辑运算
@H_502_2@Dim X As New Class2
@H_502_2@'执行参数
@H_502_2@X.tryd(s)
@H_502_2@'输出
@H_502_2@Console.WriteLine(s.name)
@H_502_2@'暂停画面
@H_502_2@Console.ReadLine()
@H_502_2@End Sub
@H_502_2@End Module
@H_502_2@

运行3执行的结果如下图@H_502_2@


@H_502_2@


@H_502_2@

byref中的实参和形参是一个人两个名称吗?@H_502_2@

1、class1类和上面的一样@H_502_2@

2、创建class2类,用来进行逻辑运算@H_502_2@

@H_502_2@Public Class Class2
@H_502_2@Public Sub tryd(ByRef classx As Class1)
@H_502_2@'形参的对象中创建新的class1
@H_502_2@Dim y As New Class1
@H_502_2@'赋值
@H_502_2@y.name = "一个人,两个名称"

@H_502_2@'给形参赋值
@H_502_2@classx = y
@H_502_2@End Sub
@H_502_2@End Class
@H_502_2@

3、新建控制台应用程序@H_502_2@

@H_502_2@Module Module1
@H_502_2@Sub Main()
@H_502_2@'定义class1类对象 进行参数的传递
@H_502_2@Dim s As New Class1
@H_502_2@'赋值
@H_502_2@s.name = "不是同一个人,两个名称!"

@H_502_2@'定义class2类 逻辑运算
@H_502_2@Dim X As New Class2
@H_502_2@'执行
@H_502_2@X.tryd(s)

@H_502_2@'输出实参的name属性
@H_502_2@Console.WriteLine(s.name)

@H_502_2@'暂停画面
@H_502_2@Console.ReadLine()
@H_502_2@End Sub
@H_502_2@End Module@H_502_2@

执行3的结果如下图@H_502_2@

@H_502_2@

猜你在找的VB相关文章