VB中的ByVal

qq_44900374 2020-03-11 04:55:56
请问大家,以下两个子过程 Sub Button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click, MenuItem2.Click 和 Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 为什么前一个要在sender前加ByVal后一个却不用,难道第一个一定要强调是传值吗?
...全文
849 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_44900374 2020-03-12
  • 打赏
  • 举报
回复
引用 4 楼 良朋的回复:
下面的示例中,实参是 c1,它是类 Class1 的一个实例。 ByVal 防止过程中的代码更改引用实参 c1 的基础值,但是不保护 c1 的可访问字段和属性。
Module Module1

Sub Main()

' Declare an instance of the class and assign a value to its field.
Dim c1 As Class1 = New Class1()
c1.Field = 5
Console.WriteLine(c1.Field)
' Output: 5

' ByVal does not prevent changing the value of a field or property.
ChangeFieldValue(c1)
Console.WriteLine(c1.Field)
' Output: 500

' ByVal does prevent changing the value of c1 itself.
ChangeClassReference(c1)
Console.WriteLine(c1.Field)
' Output: 500

Console.ReadKey()
End Sub

Public Sub ChangeFieldValue(ByVal cls As Class1)
cls.Field = 500
End Sub

Public Sub ChangeClassReference(ByVal cls As Class1)
cls = New Class1()
cls.Field = 1000
End Sub

Public Class Class1
Public Field As Integer
End Class

End Module
多谢多谢!我懂了!
良朋 2020-03-12
  • 打赏
  • 举报
回复
下面的示例中,实参是 c1,它是类 Class1 的一个实例。 ByVal 防止过程中的代码更改引用实参 c1 的基础值,但是不保护 c1 的可访问字段和属性。
Module Module1

Sub Main()

' Declare an instance of the class and assign a value to its field.
Dim c1 As Class1 = New Class1()
c1.Field = 5
Console.WriteLine(c1.Field)
' Output: 5

' ByVal does not prevent changing the value of a field or property.
ChangeFieldValue(c1)
Console.WriteLine(c1.Field)
' Output: 500

' ByVal does prevent changing the value of c1 itself.
ChangeClassReference(c1)
Console.WriteLine(c1.Field)
' Output: 500

Console.ReadKey()
End Sub

Public Sub ChangeFieldValue(ByVal cls As Class1)
cls.Field = 500
End Sub

Public Sub ChangeClassReference(ByVal cls As Class1)
cls = New Class1()
cls.Field = 1000
End Sub

Public Class Class1
Public Field As Integer
End Class

End Module
threenewbee 2020-03-11
  • 打赏
  • 举报
回复
VB默认Byref
VB.NET默认byval
qq_44900374 2020-03-11
  • 打赏
  • 举报
回复
引用 1 楼 良朋的回复:
ByVal可加可不加,但加了之后被调用的过程或属性不能更改调用它的代码中参数下面的变量的值。
谢谢您的回答。但我有一点不太理解,不能更改调用它的代码中参数下面的变量的值,这个变量是指代入子过程的变量,还是指过程产生的变量 e
良朋 2020-03-11
  • 打赏
  • 举报
回复
ByVal可加可不加,但加了之后被调用的过程或属性不能更改调用它的代码中参数下面的变量的值。

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧