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