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