我刚刚安装了Visual Studio 2010 Service Pack(在Windows Update上提出),我可以在“intellisense”上看到一个新功能,这意味着我在VB中编写Function
或Sub
时。 NET不会使用ByRef
或ByVal
...
1)无论如何,我可以将此选项配置回原来的状态吗?
2)如果我没有指定ByX
,默认使用哪一个? (似乎总是ByRef
)
答案 0 :(得分:42)
这篇文章似乎涵盖了您的问题:
所以不,没有办法得到旧的行为。从现在开始ByVal
是默认值(之前的版本),它不会自动添加到方法参数中。
在我看来,这是一个很好的决定,因为它使VB.NET与C#更加一致,避免了不必要的“噪音”(它已经足够冗长)。
旧行为:
Private Sub test(ByVal test As String)
End Sub
新行为
Private Sub test(test As String)
End Sub
答案 1 :(得分:17)
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提供)。
这可能很麻烦。