Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Quando si chiama una routine, ogni argomento fornito corrisponde a uno dei parametri definiti nella routine. In alcuni casi, il codice della procedura può modificare il valore di un argomento nel codice chiamante. In altri casi, la routine può modificare solo la copia locale di un argomento.
Quando si chiama la routine, Visual Basic esegue una copia locale di ogni argomento passato da ByVal. Per ogni argomento passato ByRef, Visual Basic fornisce al codice della routine un riferimento diretto all'elemento di programmazione sottostante l'argomento nel codice chiamante.
Se l'elemento sottostante nel codice chiamante è un elemento modificabile e l'argomento viene passato ByRef
, il codice della routine può usare il riferimento diretto per modificare il valore dell'elemento nel codice chiamante.
Modifica del valore sottostante
Per modificare il valore sottostante di un argomento di routine nel codice chiamante
Nella dichiarazione della routine specificare ByRef per il parametro corrispondente all'argomento .
Nel codice chiamante passare un elemento di programmazione modificabile come argomento.
Nel codice chiamante non racchiudere l'argomento tra parentesi nell'elenco di argomenti.
Nel codice della routine usare il nome del parametro per assegnare un valore all'elemento sottostante nel codice chiamante.
Per una dimostrazione, vedere l'esempio più avanti.
Modifica delle copie locali
Se l'elemento sottostante nel codice chiamante è un elemento non modificabile o se l'argomento viene passato ByVal
, la routine non può modificarne il valore nel codice chiamante. Tuttavia, la routine può modificare la copia locale di tale argomento.
Per modificare la copia di un argomento di procedura nel codice della procedura
Nella dichiarazione della routine specificare ByVal per il parametro corrispondente all'argomento .
oppure
Nel codice chiamante racchiudere l'argomento tra parentesi nell'elenco di argomenti. In questo modo, Visual Basic è costretto a passare l'argomento per valore, anche se il parametro corrispondente specifica
ByRef
.Nel codice della procedura, usare il nome del parametro per assegnare un valore alla copia locale dell'argomento. Il valore sottostante nel codice chiamante non viene modificato.
Esempio
Nell'esempio seguente vengono illustrate due procedure che accettano una variabile di matrice e operano sui relativi elementi. La increase
routine aggiunge semplicemente uno a ogni elemento. La replace
procedura assegna una nuova matrice al parametro a()
e quindi ne aggiunge uno a ogni elemento.
Public Sub increase(ByVal a() As Long)
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Public Sub replace(ByRef a() As Long)
Dim k() As Long = {100, 200, 300}
a = k
For j As Integer = 0 To UBound(a)
a(j) = a(j) + 1
Next j
End Sub
Dim n() As Long = {10, 20, 30, 40}
Call increase(n)
MsgBox("After increase(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
Call replace(n)
MsgBox("After replace(n): " & CStr(n(0)) & ", " &
CStr(n(1)) & ", " & CStr(n(2)) & ", " & CStr(n(3)))
La prima MsgBox
chiamata visualizza "Dopo l'aumento(n): 11, 21, 31, 41". Poiché la matrice n
è un tipo riferimento, replace
può modificare i relativi membri, anche se il meccanismo di passaggio è ByVal
.
La seconda MsgBox
chiamata visualizza "Dopo la sostituzione: 101, 201, 301". Poiché n
viene passato ByRef
, replace
può modificare la variabile n
nel codice chiamante e assegnarvi una nuova matrice. Poiché n
è un tipo riferimento, replace
può anche modificare i relativi membri.
È possibile impedire alla routine di modificare la variabile stessa nel codice chiamante. Vedi Come proteggere un argomento di procedura dalle modifiche del valore.
Compilare il codice
Quando si passa una variabile per riferimento, è necessario usare la ByRef
parola chiave per specificare questo meccanismo.
La modalità predefinita in Visual Basic è passare gli argomenti per valore. È tuttavia consigliabile includere la parola chiave ByVal o ByRef con ogni parametro dichiarato. In questo modo il codice risulta più semplice da leggere.
Sicurezza di .NET Framework
Esiste sempre un rischio potenziale per consentire a una routine di modificare il valore sottostante un argomento nel codice chiamante. Assicurarsi che questo valore venga modificato e che sia pronto a verificarne la validità prima di usarlo.
Vedere anche
- Procedure
- Parametri e argomenti della procedura
- Come: Passare argomenti a una procedura
- Passaggio di argomenti per valore e per riferimento
- Differenze tra argomenti modificabili e non modificabili
- Differenze tra il passaggio di un argomento per valore e per riferimento
- Come proteggere un argomento della procedura contro il cambiamento di valore
- Procedura: Forzare il passaggio di un argomento in base al valore
- Passaggio di argomenti per posizione e per nome
- Tipi Valore e Tipi di Riferimento