ByVal (Visual Basic)

指定按值传递参数,以便被调用的过程或属性无法更改调用代码中参数基础的变量的值。 如果未指定修饰符,则 ByVal 为默认值。

注意

由于它是默认值,因此不必在方法签名中显式指定 ByVal 关键字。 它通常会产生干扰代码,经常导致非默认的 ByRef 关键字被忽略。

注解

ByVal 修饰符可用于下面的上下文中:

Declare Statement

Function 语句

Operator Statement

Property Statement

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

另请参阅