|
2017/03/06(Mon) 22:56:25 編集(投稿者)
■No83106 (はーと さん) に返信 > byvalだからtextboxはそのままだと値型として代入される > 合ってますか?
全然違います。TextBox クラスはどうあっても参照型です。
参照型と参照渡し、値型と値渡しは用語としては似ていますが それぞれ別の仕組みなので、混同せぬようご注意下さい。
先ほどのは参照型(TextBox クラス)のサンプルだったので、 今度は値型(Point 構造体)で、ByRef/ByVal の違いを見てみましょう。
TextBox の場合と Point の場合とで、 Test3 の結果に差異がある点に着目してみてください。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click '変数 p1 は Point 構造体で示される座標値 {X = 111, Y = 112} を保持している '変数 p2 は Point 構造体で示される座標値 {X = 121, Y = 122} を保持している Dim p1 As New Point(111, 112) Dim p2 As New Point(121, 122) Test1(p1) Test2(p2) MsgBox(p1.ToString()) '{X=1111,Y=2112} に書き換わる MsgBox(p2.ToString()) '{X=121,Y=122} のまま End Sub
Private Sub Test1(ByRef p As Point) p.X += 1000 p.Y += 2000 End Sub
Private Sub Test2(ByVal p As Point) p.X += 3000 p.Y += 4000 End Sub
'-----------------------------------
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click '変数 p3 は Point 構造体で示される座標値 {X = 211, Y = 212} を保持している '変数 p4 は Point 構造体で示される座標値 {X = 221, Y = 222} を保持している Dim p3 As New Point(211, 212) Dim p4 As New Point(221, 222) Test3(p3) Test4(p4) MsgBox(p3.ToString()) '{X=999,Y=888} に書き換わる MsgBox(p4.ToString()) '{X=221,Y=222} のまま End Sub
Private Sub Test3(ByRef p As Point) p = New Point(999, 888) End Sub
Private Sub Test4(ByVal p As Point) p = New Point(777, 666) End Sub
|