ho fatto un po di prove... quale ke sia il passaggio nn viene assolutamente creata una nuova istanza dell'oggetto...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.
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':
indipendentemente dal fatto ke sia Sub Fu(ByVal P As Person) o Sub Fu(Byref P As Person)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
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??

Rispondi quotando