Share via


値型と参照型

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

値型

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

  • すべての数値データ型

  • Boolean、Char、および Date

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

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

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

値型は、Decimal などの予約済みのキーワードを使用して宣言できます。 値型を初期化するときにも New キーワードを使用できます。 これは、その型にパラメーターをとるコンストラクターがある場合に特に有効です。 これに関する例は、指定した部分から新しい Decimal 値を作成する、#ctor(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 における型変換