ByVal (Visual Basic)

呼び出されたプロシージャまたはプロパティが呼び出し元のコード内の引数の基になる変数の値を変更できないように、引数を 値渡しすることを指定します。 修飾子が指定されていない場合、ByVal が既定です。

注

既定値であるため、メソッド シグネチャで ByVal キーワードを明示的に指定する必要はありません。 ノイズの多いコードが生成される傾向があり、多くの場合、既定以外の ByRef キーワードが見落とされます。

注釈

ByVal修飾子は、次のコンテキストで使用できます。

宣言ステートメント

関数文

オペレーターのステートメント

財産声明

サブステートメント

例

次の例では、 ByVal パラメーターの受け渡しメカニズムを参照型引数と共に使用する方法を示します。 この例では、引数はクラス Class1のインスタンスであるc1です。 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

こちらも参照ください