Share via


値型と参照型

Visual Basic ではデータ型がクラスに基づいて実行されます。Visual Basic のデータ型は、その型の変数にデータそのものが格納されるのか、それともデータへのポインターが格納されるのかによって分類されます。データそのものが格納される場合は値型、メモリのどこか別の場所にあるデータへのポインターを格納する場合は参照型になります。

値型

データ型が自身のメモリ内にデータを保持する場合、そのデータ型は値型です。値型には、次のようなものがあります。

  • すべての数値データ型

  • Boolean、Char、および Date

  • すべての構造体 (メンバーが参照型の場合でも)

  • 列挙型 (基になる型が常に SByte、Short、Integer、Long、Byte、UShort、UInteger、または ULong であるため)

すべての構造体は参照型のメンバーを持っていても値型です。したがってChar などの値型と Integer は.NET Framework の構造体によって実装されます。

値型は、Decimal などの予約済みのキーワードを使用して宣言できます。値型を初期化するときにも New キーワードを使用できます。これは、その型にパラメーターをとるコンストラクターがある場合に特に有効です。これに関する例は、指定した部分から新しい Decimal 値を作成する、Decimal(Int32, Int32, Int32, Boolean, Byte) コンストラクターです。

参照型

参照型には、データを保持する別のメモリ位置へのポインターが格納されます。参照型には、次のようなものがあります。

  • String

  • すべての配列 (要素が値型の場合でも)

  • クラス型 (Form など)

  • デリゲート

クラスは参照型です。このため、Object や String などの参照型は、.NET Framework クラスによってサポートされます。メンバーが値型であっても、配列はすべて参照型です。

すべての参照型は基になる .NET Framework のクラスを表すため初期化と New 演算子 (Visual Basic) のキーワードを使用する必要があります。次のステートメントで配列を初期化します。

Dim totals() As Single = New Single(8) {}

型ではない要素

次のプログラミング要素は、宣言された要素のデータ型として指定できないため、型として修飾しません。

  • 名前空間

  • モジュール

  • イベント

  • プロパティおよびプロシージャ

  • 変数、定数およびフィールド

オブジェクトのデータ型の操作

オブジェクト型 (Object) の変数には参照型と値型のどちらでも代入できます。オブジェクト型 (Object) の変数は常にデータそのものではなくデータへのポインターを保持します。ただし、オブジェクト型 (Object) の変数に値型を代入すると、独自のデータを保持しているように動作します。詳細については、「オブジェクト型 (Object)」を参照してください。

Object の変数が参照型または値型として Microsoft.VisualBasic の名前空間の Information クラスの IsReference のメソッドに渡して動作しているかを調べることができます。Object 変数の内容が参照型を表している場合、Information.IsReference は True を返します。

参照

関連項目

Structure ステートメント

オブジェクト型 (Object)

概念

null 許容値型 (Visual Basic)

データ型の有効な使用方法 (Visual Basic)

Visual Basic におけるデータ型

その他の技術情報

Visual Basic における型変換