Share via


Differenze tra il passaggio di argomenti per valore e per riferimento

Aggiornamento: novembre 2007

Quando si passano uno o più argomenti a una routine, ciascun argomento corrisponde a un elemento di programmazione sottostante nel codice chiamante. È possibile passare il valore di tale elemento sottostante oppure un riferimento a esso. Questa procedura è nota come meccanismo di passaggio.

Passaggio per valore

Per passare un argomento per valore, è necessario specificare la parola chiave ByVal per il parametro corrispondente nella definizione della routine. Quando si utilizza il meccanismo di passaggio, il valore dell'elemento di programmazione sottostante viene copiato 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, è necessario specificare la parola chiave ByRef per il parametro corrispondente nella definizione della routine. Quando si utilizza il meccanismo di passaggio, alla routine viene assegnato un riferimento diretto all'elemento di programmazione sottostante nel codice chiamante.

Meccanismo di passaggio e tipo di elemento

Il meccanismo di passaggio non equivale alla classificazione del tipo di elemento sottostante. Il passaggio per valore o per riferimento si riferisce a quanto viene fornito al codice della routine. Un tipo di valore o un tipo di riferimento si riferisce alla modalità di memorizzazione di un elemento di programmazione.

Il meccanismo di passaggio e il tipo di elemento sono, tuttavia, correlati tra loro. Il valore di un tipo di riferimento costituisce un puntatore ai dati presenti in un altro punto della memoria. Quando si passa un tipo di riferimento per valore, il codice della routine presenta un puntatore ai dati dell'elemento sottostante, anche se non può accedere all'elemento sottostante vero e proprio. Se, ad esempio, l'elemento è una variabile di matrice, il codice della routine non può accedere 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, a prescindere dal fatto che sia passato come ByVal o ByRef.

Per un elemento modificabile, nella tabella che segue viene riepilogata l'interazione tra il tipo di elemento e il meccanismo di passaggio.

Tipo di elemento

ByVal passato

ByRef passato

Tipo di valore (contiene solo un valore).

La routine non può modificare la variabile o i suoi membri.

La routine può modificare la variabile e i suoi membri.

Tipo di riferimento (contiene un puntatore a un'istanza di classe o di struttura)

La routine non può modificare la variabile ma può modificare i membri dell'istanza ai quali essa punta.

La routine può modificare la variabile e i membri dell'istanza ai quali essa punta.

Vedere anche

Attività

Procedura: passare argomenti a una routine

Procedura: cambiare il valore di un argomento di routine

Procedura: impedire la modifica del valore di un argomento di una routine

Procedura: forzare il passaggio di un argomento per valore

Concetti

Routine in Visual Basic

Parametri e argomenti delle routine

Passaggio di argomenti per valore e per riferimento

Differenze tra argomenti modificabili e non modificabili

Passaggio di argomenti tramite posizione e tramite nome

Tipi valore e tipi riferimento