Mi aiutate a capire perchè succede questo???

1) creo una matrice
2) La carico con tutti gli elementi pari a 5
3) Trasferisco alla Sub la matrice come parametro [passaggio(matrix)]
4) Il trasferimento avviene per valore [ByVal temp(,) As Single]
5) Nella Sub cambio tutti i valori a 20 alla matrice "temp"

Ora se vado a vedere gli elementi della matrice "matrix" (quella iniziale per intenderci) hanno tutti valore 20.

DOMANDA?
Perchè succede questo? Ho passato i valori come ByVal e quindi non dovevano modificarsi.
Rifacendo il tutto con un numero invece che con una matrice effettivamente il valore iniziale resta corretto.

Perchè questa differenza di comportamento???

Grazie in anticipo e ciao


codice:
'Nota: Servono 1 Button e 2 ListBox (se desiderate provarlo)

    Dim matrix(2, 1) As Single    'Definisco la matrice


    Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        matrix(0, 0) = 5
        matrix(1, 0) = 5
        matrix(2, 0) = 5

        matrix(0, 1) = 5
        matrix(1, 1) = 5
        matrix(2, 1) = 5



        'Visualizza i valori iniziali della matrice
        For q As Integer = 0 To 2
            ListBox1.Items.Add(matrix(q, 0) & vbTab & matrix(q, 1))
        Next

        'Chiamata al Sub
        passaggio(matrix)

        'Visualizza i valori della matrice DOPO L'ORDINAMENTO
        For q As Integer = 0 To 2
            ListBox2.Items.Add(matrix(q, 0) & vbTab & matrix(q, 1))
        Next


    End Sub


    Sub passaggio(ByVal temp(,) As Single)

        For k As Integer = 0 To 2
            For m As Integer = 0 To 1
                temp(k, m) = 20
            Next
        Next
    End Sub