Condividi tramite


ByVal (Visual Basic)

Specifica che un argomento viene passato per valore, in modo che la routine o la proprietà chiamata non possa modificare il valore di una variabile sottostante all'argomento nel codice chiamante. Se non viene specificato alcun modificatore, ByVal è l'impostazione predefinita.

Nota

Di conseguenza, non è necessario specificare in modo esplicito la parola chiave ByVal nelle firme del metodo. Tende a produrre un codice disturbato e spesso porta a trascurare la parola chiave ByRef non predefinita.

Osservazioni:

Il modificatore ByVal può essere usato nei contesti seguenti:

Declare Statement

Istruzione Function

Istruzione Operator

Istruzione Property

Istruzione Sub

Esempio

Nell'esempio seguente viene illustrato l'uso del meccanismo di passaggio del parametro ByVal con un argomento di tipo generico. Nell'esempio l'argomento è c1, un'istanza della classe Class1. ByVal impedisce al codice nelle procedure di modificare il valore sottostante dell'argomento di riferimento, c1, ma non protegge i campi e le proprietà accessibili di c1.

Module Module1

    Sub Main()

        ' Declare an instance of the class and assign a value to its field.
        Dim c1 As New Class1()
        c1.Field = 5
        Console.WriteLine(c1.Field)
        ' Output: 5

        ' ByVal does not prevent changing the value of a field or property.
        ChangeFieldValue(c1)
        Console.WriteLine(c1.Field)
        ' Output: 500

        ' ByVal does prevent changing the value of c1 itself. 
        ChangeClassReference(c1)
        Console.WriteLine(c1.Field)
        ' Output: 500

        Console.ReadKey()
    End Sub

    Public Sub ChangeFieldValue(ByVal cls As Class1)
        cls.Field = 500
    End Sub

    Public Sub ChangeClassReference(ByVal cls As Class1)
        cls = New Class1()
        cls.Field = 1000
    End Sub

    Public Class Class1
        Public Field As Integer
    End Class

End Module

Vedi anche