假设我有以下功能:
Function myFunction(j As Integer) As Double
myFunction = 3.87 * j
Exit Function
End Function
是j
作为值传递ByVal
还是通过引用传递ByRef
?
还是取决于数据类型?如果我有一个复杂的对象作为值传递怎么办?
提前致谢!
假设我有以下功能:
Function myFunction(j As Integer) As Double
myFunction = 3.87 * j
Exit Function
End Function
是j
作为值传递ByVal
还是通过引用传递ByRef
?
还是取决于数据类型?如果我有一个复杂的对象作为值传递怎么办?
提前致谢!
ByVal
除非明确指定,否则传递参数。有关详细信息,请参阅按值和按引用传递参数,其中指出:
Visual Basic 中的默认设置是按值传递参数。您可以使用 ByVal 关键字使您的代码更易于阅读。在每个声明的参数中包含 ByVal 或 ByRef 关键字是一种很好的编程习惯。
至于:
如果我有一个复杂的对象作为值传递怎么办?
这很好,只要“复杂对象”是一个类(引用类型),您就不会进行大量复制。这是因为对对象实例的引用是按值 (ByVal) 传递的,这意味着您只复制一个引用,即使该类非常大。
但是,如果复杂对象是一个结构(值类型),您将导致在调用方法时复制该对象。顺便说一句,这就是为什么像 XNA 这样的一些框架提供了许多方法的替代版本(比如Matrix.Multiply),这些方法可以选择通过ByRef
- 这避免了昂贵的 Matrix 结构副本。
j
在这种情况下是通过的ByVal
。ByVal
除非ByRef
明确说明,否则始终传递参数。从VB.NET 10 规范的第 9.2.5 节:
未指定 ByRef 或 ByVal 的参数默认为 ByVal。