默认情况下,参数如何传递给VB函数

时间:2012-05-22 19:45:47

标签: vb.net

假设我有以下功能:

Function myFunction(j As Integer) As Double
    myFunction = 3.87 * j
    Exit Function
End Function

j作为值ByVal或参考ByRef传递了吗?

或者它取决于数据类型?如果我将一个复杂的对象作为值传递怎么办?

提前致谢!

2 个答案:

答案 0 :(得分:8)

除非明确指定,否则传递参数ByVal。有关详细信息,请参阅Passing Arguments by Value and by Reference,其中说明:

  

Visual Basic中的默认值是按值传递参数。您可以使用ByVal关键字使代码更易于阅读。在每个声明的参数中包含ByVal或ByRef关键字是一种很好的编程习惯。

至于:

  

如果我将复杂对象作为值传递怎么办?

这没关系,只要“复杂对象”是一个类(引用类型),你就不会进行大量的复制。这是因为对象实例的引用是通过值(ByVal)传递的,这意味着您只复制一个引用,即使该类非常大。

但是,如果复杂对象是结构(值类型),则在调用方法时将导致复制对象。这是顺便说一下,为什么像XNA这样的一些框架提供了许多方法的替代版本(如Matrix.Multiply),它们可以选择传递ByRef - 这可以避免昂贵的Matrix结构副本。

答案 1 :(得分:1)

在这种情况下,

j已通过ByVal。除非明确说明ByVal,否则始终会传递参数ByRef。来自VB.NET 10 Specification的第9.2.5节:

  

未指定ByRef或ByVal的参数默认为ByVal。