
こんにちは、ひろにもです。
今回は、ByValとByRefの違いについてまとめていきます。
それでは、さっそく見ていきましょう
ByValとByRefの違い
関数には引数(パラメータ)を設定することができます。
始めてプログラミングをやっていた時、本とかでByVal(値渡し)はByRef(参照渡し)って書いてあって、どういうことなんだ!?ってなったのをよく覚えています。。
これに関しては例を見たらすぐわかるので、早速ですが、例を見ていきましょう。
画面レイアウト
ByValの例
Private Sub BtnByVal_Click(sender As Object, e As EventArgs) Handles btnByVal.Click
Dim msg As String = "デフォルトの値"
CallByVal(msg)
lblAnswer.Text = msg
End Sub
Private Sub CallByVal(ByVal p_msg As String)
p_msg = "ByValの値を入れたよ!"
End Sub
それでは、解説していきます。
3行目:変数:msgに"デフォルトの値"を代入
5行目:CallByVal(msg)を呼び出す。
7行目:msgの値をラベルに表示する。
11行目:CallByValの引数にp_msgを宣言
12行目:p_msg = "ByValの値を入れたよ!"と値を代入する。
なんとなく、ラベルには"ByValの値を入れたよ!と表示されそうですね。
結果を見てみましょう。
結果
ラベルには"デフォルトの値"と表示されました。
そう、ByValの時は、関数内でいくら値を代入しても、反映されないのです!
続いて、ByRefを見ていきましょう。
ByRefの場合
Private Sub BtnByRef_Click(sender As Object, e As EventArgs) Handles btnByRef.Click
Dim msg As String = "デフォルトの値"
CallByRef(msg)
lblAnswer.Text = msg
End Sub
Private Sub CallByRef(ByRef p_msg As String)
p_msg = "ByRefの値を入れたよ!"
End Sub
もう皆さん、結果の予想はできているでしょう。。
結果はこちら
ラベルには、"ByRefの値を入れたよ!"が反映されていますね。
ByRefにすると、関数内でパラメータの値を変更すると、呼び出し元に変更が反映されるのです。
まとめ
ポイント
- ByValは、関数内で引数の値を変更しても、呼び出し元の変数には影響がない。
- ByRefは、関数内で引数の値を変更すると、呼び出し元の変数が関数内で指定した値になる。
ByValとByRefの違いが分かったのではないでしょうか。
今回は以上となります。
関連記事