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 routine può modificare il valore sottostante 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 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.
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.
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.
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 passerà l'argomento per valore, anche se il parametro corrispondente specifica
ByRef
.Nel codice della routine usare il nome del parametro per assegnare un valore alla copia locale dell'argomento. Il valore sottostante nel codice chiamante non viene modificato.
Nell'esempio seguente vengono illustrate due routine che accettano una variabile di matrice e operano sui relativi elementi. La routine increase
aggiunge semplicemente uno a ogni elemento. La routine replace
assegna una nuova matrice al parametro a()
e quindi 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 chiamata MsgBox
visualizza "After increase(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 chiamata MsgBox
visualizza "After replace(n): 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. Vedere Procedura: impedire la modifica del valore di un argomento di una routine.
Quando si passa una variabile per riferimento, è necessario usare la parola chiave ByRef
per specificare questo meccanismo.
L'impostazione predefinita in Visual Basic prevede il passaggio degli 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.
Esiste sempre un rischio potenziale nel consentire a una routine di modificare il valore sottostante un argomento nel codice chiamante. Assicurarsi di aspettarsi che questo valore venga modificato e di essere pronti a verificarne la validità prima di usarlo.
- Procedure
- Parametri e argomenti delle routine
- Procedura: Passare argomenti a una routine
- 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
- Procedura: impedire la modifica del valore di un argomento di una routine
- Procedura: forzare il passaggio di un argomento per valore
- Passaggio di argomenti in base alla posizione e al nome
- Tipi valore e tipi di riferimento
Feedback su .NET
.NET è un progetto di open source. Selezionare un collegamento per fornire feedback: