2012-05-22 69 views
4

到VB功能比方说,我有以下功能:如何参数传递默认

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

j作为价值ByVal或引用ByRef通过呢?

还是取决于数据类型?如果我有一个复杂的对象作为值传递怎么办?

在此先感谢!

回答

8

参数通过ByVal,除非明确指定。有关详细信息,请参阅Passing Arguments by Value and by Reference,其中声明:

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

至于:

如果我有作为值传递一个复杂的对象?

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

但是,如果复杂对象是一个结构体(值类型),那么在调用该方法时将导致该对象被复制。这就是为什么一些像XNA这样的框架提供了许多方法的替代版本(如Matrix.Multiply)可以选择通过ByRef - 这样可以避免昂贵的Matrix结构副本。

+0

感谢您的完整答案和链接! – Luis

1

j在这种情况下通过ByVal。除非明确指出ByRef,否则始终传递参数ByVal。来自VB.NET 10 Specification的第9.2.5节:

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