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

Quando si passano 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 concetto è noto come meccanismo di passaggio.

passaggio per valore

Si passa un argomento per valore specificando la parola chiave ByVal per il parametro corrispondente nella definizione della routine. Quando si usa 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

Si passa un argomento per riferimento specificando la parola chiave ByRef per il parametro corrispondente nella definizione della routine. Quando si usa 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 riferimento fa riferimento a ciò che Visual Basic fornisce al codice della routine. I termini tipo valore o tipo riferimento fanno riferimento al modo in cui un elemento di programmazione viene archiviato in memoria.

Il meccanismo di passaggio e il tipo di elemento sono tuttavia correlati. Il valore di un tipo riferimento è un puntatore ai dati altrove in memoria. Ciò significa che quando si passa un tipo riferimento per valore, il codice della routine ha un puntatore ai dati dell'elemento sottostante, anche se non può accedere all'elemento sottostante stesso. Se ad esempio 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 modificarlo nel codice chiamante, indipendentemente dal fatto che venga passato 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 Passaggio di ByVal Passaggio di ByRef
Tipo valore (contiene solo un valore) La routine non può modificare la variabile o uno dei relativi membri. La routine può modificare la variabile e i relativi membri.
Tipo riferimento (contiene un puntatore a una classe o a un'istanza della struttura) La routine non può modificare la variabile, ma può modificare i membri dell'istanza a cui punta. La routine può modificare la variabile e i membri dell'istanza a cui punta.

Vedi anche