ByVal (Visual Basic)

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

注意

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

Remarks

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

Declare ステートメント

Function ステートメント

Operator ステートメント

Property ステートメント

Sub ステートメント

次の例では、参照型の引数を指定して 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

関連項目