VB.NET 値型と参照型

      2017/07/13


値型と参照型

メモリのデータの保存方法の違いです。
データの保存方法はスタックメモリとピープメモリがあります。

値型はスタックメモリです。
値型は変数がそのまま格納される。
構造体は値型です。

参照型はピープメモリです。
参照型はデータのアドレスが格納される。
クラスは参照型です。


備考:.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

当たり前だが同じ結果になる。

なおクラスは参照型だが引数にすると値渡しでも参照渡しと同じ結果になる。
インスタンスが上書きされるだけである。

まとまったデータは構造体を使うのが一般的です。

基礎文法をサンプルコードや文章で解説しています。

変数と型と演算子

インクリメント デクリメント

vb-net入門-三項演算子 IIf関数 If演算子

値型と参照型

構造体

IfとSelect Case条件文

For NextとFor Each条件文

Do While Loop条件文

イベント

イベントハンドラの追加と削除

デリケート

マルチキャストデリケート

ラムダ式

クラス

継承

隠蔽

ポリモーフィズム

抽象クラスと抽象メソッド

インターフェース

ジェネリック

LINQ

例外処理

配列

コレクション

サブルーチンとファンクション

PR



 - 基礎文法

Translate »