首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不再需要指定ByVal/ByRef?

为什么不再需要指定ByVal/ByRef?
EN

Stack Overflow用户
提问于 2012-02-09 16:40:16
回答 3查看 30.5K关注 0票数 34

我刚刚安装了Visual Studio2010Service pack (在Windows Update上建议),我可以在“智能感知”上看到一个新功能,这意味着当我用VB.NET编写FunctionSub时,它不会使用ByRefByVal自动完成参数...

1)是否可以将此选项配置回以前的状态?

2)如果不指定ByX,默认使用哪一个?(看起来总是ByRef)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-09 21:26:15

Tim直接介绍了您所问的内容,但要记住的是,任何引用类型变量,比如用户定义的类,即使是通过值传递,也允许您对实例属性等进行更改。但是,它不允许您更改整个对象。这可能就是为什么在您看来,它默认是通过引用

代码语言:javascript
复制
Public Sub (Something As WhateverClass) 
  Something = New WhateverClass 'will result in no changes when outside this method

  Something.Property1 = "Test"  'will result in an updated property when outside this method
End Sub

来自MSDN

引用类型的值是指向内存中其他位置数据的指针。这意味着当您通过值传递引用类型时,过程代码具有指向基础元素数据的指针,即使它不能访问基础元素本身。例如,如果元素是数组变量,则过程代码无权访问变量本身,但可以访问数组成员。

票数 20
EN

Stack Overflow用户

发布于 2012-02-09 16:49:15

这篇文章似乎涵盖了你的问题:

http://msmvps.com/blogs/carlosq/archive/2011/03/15/vs-2010-sp1-changing-quot-byval-quot-vb-net-code-editor-experience.aspx

因此,没有办法获得旧的行为。从现在开始,ByVal是默认的(和以前一样),它不会自动添加到方法参数中。

在我看来,这是一个很好的决定,因为它使VB.NET与C#更加一致,并避免了不必要的“噪音”(它已经足够冗长了)。

旧的行为:

代码语言:javascript
复制
Private Sub test(ByVal test As String)
End Sub

新行为

代码语言:javascript
复制
Private Sub test(test As String)
End Sub
票数 44
EN

Stack Overflow用户

发布于 2013-11-21 20:46:46

在将例程转移到VBA时要当心,缺省值是ByRef (参见伟大的Chip Pearson在the bottom of this page上写的“传递参数的默认方法”)。这可能会很混乱。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9207620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档