違いは「値型」と「参照型」です。値型は「構造体」(VB.NET) または「構造体」(C#) として定義され、参照型は「クラス」として定義されます。integer、double、boolean などのプリミティブ型は値型です。配列は参照型です。@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