値型と参照型
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 を返します。