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

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 (Visual Basic) per il parametro corrispondente nella definizione della routine. Quando si utilizza questo meccanismo di passaggio, il valore dell'elemento di programmazione sottostante viene copiato da Visual Basic 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 (Visual Basic) per il parametro corrispondente nella definizione della routine. Quando si utilizza questo meccanismo di passaggio, Visual Basic assegna alla routine 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 da Visual Basic 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 (Visual Basic)

Procedura: cambiare il valore di un argomento di routine (Visual Basic)

Procedura: impedire la modifica del valore di un argomento di una routine (Visual Basic)

Procedura: forzare il passaggio di un argomento per valore (Visual Basic)

Concetti

Routine in Visual Basic

Parametri e argomenti delle routine (Visual Basic)

Passaggio di argomenti per valore e per riferimento (Visual Basic)

Differenze tra argomenti modificabili e non modificabili (Visual Basic)

Passaggio di argomenti in base alla posizione e al nome (Visual Basic)

Altre risorse

Implementazione del tipo di dati (Visual Basic)