Originariamente inviato da Il Totem
Quando passi un argomento di tipo Reference ad una funzione, se il passaggio avviene ByVal, se ne crea una copia (e quindi il parametro usato nel corpo è un'istanza diversa dal parametro attuale passato); se il passaggio avviene ByRef, passi alla funzione l'indirizzo dellì'istanza e quindi la puoi modificare permanentemente.
ho fatto un po di prove... quale ke sia il passaggio nn viene assolutamente creata una nuova istanza dell'oggetto...

l'esempio ke hai fatto restituisce "pinco pallino" xke nella funzione "Fu" crei te una nuova istanza: "p = new ...." spostando cosi' il riferimento del puntatore...

se fai cosi':
codice:
Module Module1

class Person
 private nome as string
....
public sub cambia(byval nuovo_nome)
   nome = nuovo_nome
end sub
end class

    Sub Fu(ByVal P As Person)
        P.cambia("Tizio")
    End Sub

    Sub Main()
        Dim Q As New Person("Pinco")

        Fu(Q)
        Console.WriteLine(Q.CompleteName)

        Console.ReadKey()
    End Sub
End Module
indipendentemente dal fatto ke sia Sub Fu(ByVal P As Person) o Sub Fu(Byref P As Person)

l'output sara' "tizio"

xo credo di aver capito alla fine... grazie al tuo esempio
mi spiego:
Fu(ByVal P As Person): P e' un puntatore all'istanza ke gia avevamo....
modifiche alle proprieta' di P causano modifiche alle proprieta' di Q
se Associo P ad un altra istanza Q continua a puntare la vekkia...

Fu(ByRef P As Person): P e' un puntatore al puntatore Q
se associo P ad un altra istanza ache Q la puntera'

e' giusto??