値型と参照型
メモリのデータの保存方法の違いです。
データの保存方法はスタックメモリとピープメモリがあります。
値型はスタックメモリです。
値型は変数がそのまま格納される。
構造体は値型です。
参照型はピープメモリです。
参照型はデータのアドレスが格納される。
クラスは参照型です。
備考:.net frameworkとは
.netで定義されているフレームワークである。
.net frameworkの中で型が定義せれていて値型か参照型である。
CharはSystem.char構造体
StringはSystem.Stringクラス
値渡しと参照渡し
基本的にはByVal(値渡し)とByRef(参照渡し)となる。
値型intger
Public Class Form1Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim j As Integer = 0
testVal(j)
MsgBox(j)
testRef(j)
MsgBox(j)
End Sub
Sub testVal(ByVal i As Integer)
i = i + 1
End Sub
Sub testRef(ByRef i As Integer)
i = i + 1
End Sub
End Class
実行結果
0
1
値渡しは値を渡している。
この場合は0という値を渡しているので答えは0なる。
参照渡しはアドレスを教えているのでアドレスにデータを代入される。
だから1になるんだ。
参照型String
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim j As String = “test”testVal(j)
MsgBox(j)
testRef(j)
MsgBox(j)
End Sub
Sub testVal(ByVal i As String)
i = ” Val”
End Sub
Sub testRef(ByRef i As String)
i = ” Ref”
End Sub
End Class
実行結果
test
Ref
当たり前だが同じ結果になる。
なおクラスは参照型だが引数にすると値渡しでも参照渡しと同じ結果になる。
インスタンスが上書きされるだけである。
まとまったデータは構造体を使うのが一般的です。