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