2012-05-22 68 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。