ByVal (Visual Basic)

Указывает, что аргумент передается по значению, поэтому вызываемая процедура или свойство не может изменить значение переменной, лежащей в основе аргумента в вызывающем коде. Если модификатор не указан, ByVal используется по умолчанию.

Примечание.

Так как это значение по умолчанию, не нужно явно указывать ByVal ключевое слово в сигнатурах методов. Он, как правило, создает шумный код и часто приводит к нестандартной ByRef ключевое слово пропускается.

Замечания

Модификатор ByVal можно использовать в следующих контекстах:

Declare Statement

Оператор Function

Оператор Statement

Оператор Property

Оператор Sub

Пример

В следующем примере показано использование механизма передачи ByVal параметров с аргументом ссылочного типа. В примере аргумент — c1экземпляр класса Class1. ByVal Запрещает коду в процедурах изменять базовое значение ссылочного аргумента, c1но не защищает доступные поля и свойства 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

См. также