Visual Basic .NET Language
ByValおよびByRefキーワード
サーチ…
ByValキーワード
メソッドパラメータの前のByValキーワード(または既定でByValとみなされるキーワードがない)は、パラメータの基礎となる変数をメソッドが変更(新しい値を代入)できないように送信されることを示します。
引数の内容(または状態)がクラスの場合は変更されません。
Class SomeClass
Public Property Member As Integer
End Class
Module Program
Sub Main()
Dim someInstance As New SomeClass With {.Member = 42}
Foo (someInstance)
' here someInstance is not Nothing (still the same object)
' but someInstance.Member is -42 (internal state can still be changed)
Dim number As Integer = 42
Foo(number)
' here number is still 42
End Sub
Sub Foo(ByVal arg As SomeClass)
arg.Member = -arg.Member ' change argument content
arg = Nothing ' change (re-assign) argument
End Sub
Sub Foo(arg As Integer) ' No ByVal or ByRef keyword, ByVal is assumed
arg = -arg
End Sub
End Module
ByRefキーワード
methodパラメータの前にByRefキーワードを指定すると、そのパラメータの基礎となる変数をメソッドが変更(新しい値を割り当てる)できるようにパラメータが送信されます。
Class SomeClass
Public Property Member As Integer
End Class
Module Program
Sub Main()
Dim someInstance As New SomeClass With {.Member = 42}
Foo (someInstance)
' here someInstance is not Nothing
' but someInstance.Member is -42
Bar(someInstance)
' here someInstance is Nothing
End Sub
Sub Foo(ByVal arg As SomeClass)
arg.Member = -arg.Member ' change argument content
arg = Nothing ' change (re-assign) argument
End Sub
Sub Bar(ByRef param As Integer)
arg.Member = -arg.Member ' change argument content
arg = Nothing ' change (re-assign) argument
End Sub
End Module
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow