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

Lui*_*uis 4 vb.net

假设我有以下功能:

Function myFunction(j As Integer) As Double
    myFunction = 3.87 * j
    Exit Function
End Function
Run Code Online (Sandbox Code Playgroud)

j作为价值ByVal还是通过参考传递ByRef

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

提前致谢!

Ree*_*sey 8

ByVal除非明确指定,否则传递参数.有关详细信息,请参阅按值和按引用传递参数,其中指出:

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

至于:

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

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

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