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.
La dichiarazione di procedura determina il meccanismo di passaggio. Se un parametro è dichiarato ByRef, Visual Basic prevede di passare l'argomento corrispondente per riferimento. Ciò consente alla routine di modificare il valore dell'elemento di programmazione sottostante l'argomento nel codice chiamante. Se si desidera proteggere l'elemento sottostante da tale modifica, è possibile eseguire l'override del ByRef
meccanismo di passaggio nella chiamata di routine racchiudendo il nome dell'argomento tra parentesi. Queste parentesi si aggiungono alle parentesi che racchiudono l'elenco di argomenti nella chiamata.
Il codice chiamante non può eseguire l'override di un meccanismo ByVal .
Per forzare il passaggio di un argomento in base al valore
Se il parametro corrispondente viene dichiarato
ByVal
nella procedura, non è necessario eseguire altri passaggi. Visual Basic prevede già di passare l'argomento per valore.Se il parametro corrispondente viene dichiarato
ByRef
nella routine, racchiudere l'argomento tra parentesi nella chiamata di routine.
Esempio
Nell'esempio seguente viene eseguito l'override di una ByRef
dichiarazione di parametro. Nella chiamata che forza ByVal
, nota i due livelli di parentesi.
Sub setNewString(ByRef inString As String)
inString = "This is a new value for the inString argument."
MsgBox(inString)
End Sub
Dim str As String = "Cannot be replaced if passed ByVal"
' The following call passes str ByVal even though it is declared ByRef.
Call setNewString((str))
' The parentheses around str protect it from change.
MsgBox(str)
' The following call allows str to be passed ByRef as declared.
Call setNewString(str)
' Variable str is not protected from change.
MsgBox(str)
Quando str
è racchiuso tra parentesi aggiuntive all'interno dell'elenco di argomenti, la setNewString
routine non può modificarne il valore nel codice chiamante e MsgBox
visualizza "Non può essere sostituito se passato ByVal". Quando str
non è racchiuso tra parentesi aggiuntive, la routine può modificarla e MsgBox
visualizza "Questo è un nuovo valore per l'argomento inString".
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.
Programmazione affidabile
Se una routine dichiara un parametro ByRef, l'esecuzione corretta del codice potrebbe dipendere dalla possibilità di modificare l'elemento sottostante nel codice chiamante. Se il codice chiamante esegue l'override di questo meccanismo di chiamata racchiudendo l'argomento tra parentesi o se passa un argomento non modificabile, la routine non può modificare l'elemento sottostante. Questo potrebbe produrre risultati imprevisti nel codice chiamante.
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
- Procedura: Modificare il valore di un argomento di procedura
- Come proteggere un argomento della procedura contro il cambiamento di valore
- Passaggio di argomenti per posizione e per nome
- Tipi Valore e Tipi di Riferimento