假设我有以下功能: Function myFunction(j As Integer) As Double myFunction = 3.87 * j Exit FunctionEnd Function j是作为值ByVal还是通过引用ByRef传递的? 或者它取决于数据类型?如果我将一个复杂的对象作
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,其中说明:The default in Visual Basic is to pass arguments by value. You can make your code easier to read by using the ByVal keyword. It is good programming practice to include either the ByVal or ByRef keyword with every declared parameter.
至于:
What if I have a complex object passed as the value?
这很好,只要“复杂对象”是一个类(引用类型),你就不会进行大量的复制.这是因为对对象实例的引用是通过值(ByVal)传递的,这意味着您只复制单个引用,即使该类非常大.
但是,如果复杂对象是结构(值类型),则在调用方法时将导致复制对象.这是顺便说一下,为什么像XNA这样的一些框架提供了许多方法的替代版本(如Matrix.Multiply),它们可以选择传递ByRef – 这可以避免昂贵的Matrix结构副本.