Condividi tramite


Differenze tra il passaggio di un argomento per valore e per riferimento (Visual Basic)

Quando si passa uno o più argomenti a una routine, ogni argomento corrisponde a un elemento di programmazione sottostante nel codice chiamante. È possibile passare il valore di questo elemento sottostante o un riferimento. Questo meccanismo è noto come meccanismo di passaggio.

Passaggio per valore

Per passare un argomento per valore, specificare la parola chiave ByVal per il parametro corrispondente nella definizione della procedura. Quando si utilizza questo meccanismo di passaggio, Visual Basic copia il valore dell'elemento di programmazione sottostante in una variabile locale nella routine. Il codice della routine non ha accesso all'elemento sottostante nel codice chiamante.

Passaggio per riferimento

Per passare un argomento per riferimento, specificare la parola chiave ByRef per il parametro corrispondente nella definizione della procedura. Quando si utilizza questo meccanismo di passaggio, Visual Basic fornisce alla routine un riferimento diretto all'elemento di programmazione sottostante nel codice chiamante.

Meccanismo di passaggio e tipo di elemento

La scelta del meccanismo di passaggio non equivale alla classificazione del tipo di elemento sottostante. Il passaggio per valore o per riferimento si riferisce a ciò che Visual Basic fornisce al codice della procedura. Un tipo valore o un tipo riferimento fa riferimento al modo in cui un elemento di programmazione viene archiviato in memoria.

Tuttavia, il meccanismo di passaggio e il tipo di elemento sono correlati. Il valore di un tipo riferimento è un puntatore ai dati altrove in memoria. Ciò significa che quando si passa un tipo di riferimento per valore, il codice della procedura ha un puntatore ai dati dell'elemento sottostante, anche se non può accedere all'elemento sottostante stesso. Ad esempio, se l'elemento è una variabile di matrice, il codice della routine non ha accesso alla variabile stessa, ma può accedere ai membri della matrice.

Possibilità di modificare

Quando si passa un elemento non modificabile come argomento, la routine non può mai modificarla nel codice chiamante, indipendentemente dal fatto che venga passata ByVal o ByRef.

Per un elemento modificabile, la tabella seguente riepiloga l'interazione tra il tipo di elemento e il meccanismo di passaggio.

Tipo di elemento Passato ByVal Passato ByRef
Tipo valore (contiene solo un valore) La routine non può modificare la variabile o uno dei relativi membri. La procedura può modificare la variabile e i relativi membri.
Tipo riferimento (contiene un puntatore a una classe o a un'istanza della struttura) La procedura non può modificare la variabile, ma può modificare i membri dell'istanza a cui punta. La procedura può modificare la variabile e i membri dell'istanza a cui punta.

Vedere anche