VB.NET ByVal ByRef 違い

こんにちは、ひろにもです。

今回は、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の違いが分かったのではないでしょうか。

今回は以上となります。

 

VB.NETの記事一覧はこちらから

関連記事

 

 

 

おすすめの記事