Condividi tramite


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

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