Teilen über


ByVal (Visual Basic)

Gibt an, dass ein Argument als Wert übergeben wird, sodass die aufgerufene Prozedur oder Eigenschaft den Wert einer zugrunde liegenden Variable des Arguments im aufrufenden Code nicht ändern kann. Wenn kein Modifizierer angegeben ist, ist ByVal der Standard.

Hinweis

Daher müssen Sie das Schlüsselwort ByVal nicht explizit in Methodensignaturen angeben. Sie erzeugt in der Regel einen ausführlichen Code und führt häufig dazu, dass das ByRef-Schlüsselwort übersehen wird, das nicht Standard ist.

Bemerkungen

Der ByVal-Modifizierer kann in folgenden Kontexten verwendet werden:

Declare Statement

Function-Anweisung

Operator Statement

Property Statement

Sub-Anweisung

Beispiel

Im folgenden Beispiel wird die Verwendung des Parameterübergabemechanismus ByVal mit einem Verweistypargument veranschaulicht. Im Beispiel ist c1 das Argument, eine Instanz der Class1-Klasse. ByVal verhindert, dass der Code in den Prozeduren den zugrunde liegenden Wert des Verweisarguments c1 ändert, schützt jedoch nicht die zugänglichen Felder und Eigenschaften von 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

Siehe auch