Dela via


ByVal (Visual Basic)

Anger att ett argument skickas av ett värde, så att den anropade proceduren eller egenskapen inte kan ändra värdet för en variabel som ligger till grund för argumentet i den anropande koden. Om ingen modifierare anges är ByVal standardinställningen.

Kommentar

Eftersom det är standardinställningen behöver du inte uttryckligen ange nyckelordet ByVal i metodsignaturer. Det tenderar att generera brusande kod och leder ofta till att nyckelordet som inte är standard ByRef förbises.

Kommentarer

Modifieraren ByVal kan användas i följande sammanhang:

Deklarera -instruktion

Funktionsuttryck

Operatoruttryck

Egenskapsutdrag

Underuttryck

Exempel

I följande exempel visas hur parameteröverföringsmekanismen ByVal används med ett argument av referenstyp. I exemplet är c1argumentet , en instans av klassen Class1. ByVal förhindrar att koden i procedurerna ändrar det underliggande värdet för referensargumentet, c1, men skyddar inte de tillgängliga fälten och egenskaperna för 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

Se även