区别在于“值类型”和“引用类型”。值类型定义为“结构”(VB.NET)或“结构”(C#),而引用类型定义为“类”。诸如整数、双精度和布尔值之类的原始类型是值类型。数组是引用类型。正如@Mattias Åslund 指出的那样,无论是通过 ByVal 还是 ByRef,对于引用类型,您总是在传递一个指针。
如果您确实想要操作传递的数组但将原始数组返回给调用过程,则需要将副本复制到新的本地声明的数组中。但是,如果传递非常大的数组,请注意开销。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim myOriginalArray As String() = New String() {"Hello", "to", "you", "Michael"}
ManipulateArray(myOriginalArray)
MessageBox.Show("myOriginalArray = " & myOriginalArray(0) & " " & myOriginalArray(1) & " " & myOriginalArray(2) & " " & myOriginalArray(3))
End Sub
Private Sub ManipulateArray(ByVal myOriginalArray As String())
Dim myCopyArray(myOriginalArray.GetUpperBound(0)) As String
myOriginalArray.CopyTo(myCopyArray, 0)
myCopyArray(3) = "Sarah"
MessageBox.Show("myCopyArray = " & myCopyArray(0) & " " & myCopyArray(1) & " " & myCopyArray(2) & " " & myCopyArray(3))
End Sub