为什么没有必要再指出ByVal / ByRef?

时间:2012-02-09 08:40:16

标签: vb.net visual-studio-2010 byref byval

我刚刚安装了Visual Studio 2010 Service Pack(在Windows Update上提出),我可以在“intellisense”上看到一个新功能,这意味着我在VB中编写FunctionSub时。 NET不会使用ByRefByVal ...

自动完成参数

1)无论如何,我可以将此选项配置回原来的状态吗?

2)如果我没有指定ByX,默认使用哪一个? (似乎总是ByRef

3 个答案:

答案 0 :(得分:42)

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

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#更加一致,避免了不必要的“噪音”(它已经足够冗长)。

旧行为:

Private Sub test(ByVal test As String)
End Sub

新行为

Private Sub test(test As String)
End Sub

答案 1 :(得分:17)

Tim直接覆盖了你所问的内容,但要注意的是,任何引用类型变量(如用户定义的类,即使通过值传递)也允许您对保留的实例属性进行更改。但是它不允许您更改整个对象。这可能就是为什么你似乎默认参考

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

  

引用类型的值是指向内存中其他位置的数据的指针。     这意味着当您按值传递引用类型时,   过程代码有一个指向底层元素数据的指针,   即使它无法访问底层元素本身。对于   例如,如果元素是数组变量,则过程代码可以   无法访问变量本身,但它可以访问该数组   成员。

答案 2 :(得分:12)

在将例程传输到VBA时要小心,默认值为ByRef(参见the bottom of this page的“{3}}中的”传递参数的默认方法“,由伟大的Chip Pearson提供)。 这可能很麻烦。