データ型の実装 (Visual Basic)

Visual Basic のすべての基本データ型は、System 名前空間の構造体またはクラスによってサポートされています。 コンパイラでは、基になる構造体またはクラスに対して各データ型のキーワードをエイリアスとして使用します。 たとえば、予約語 Byte を使用する変数の宣言は、完全修飾構造体名 System.Byte を使用する宣言と同じです。

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) {}

.NET Framework で利用できるその他の型

共通言語ランタイム (CLR: Common Language Runtime) では、Visual Basic に用意されていない構造体とクラスもサポートされます。 たとえば、System.Guid 構造体には、グローバル一意識別子 (GUID: globally unique identifier) が用意されています。また、System.TimeZone クラスでは、タイム ゾーンがサポートされています。 これらの型を使用して変数および定数を宣言したり、.NET Framework によってこれらの型に実装されるメソッドにアクセスできます。 ただし、Visual Basic に用意されていない型に関連する演算や型変換はサポートされません。

型ではない要素

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

  • 名前空間

  • モジュール

  • イベント

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

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

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

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

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

メンバーを持つデータ型

これらは、.NET Framework 構造体およびクラスによってサポートされているため、Visual Basic データ型にはメンバーがあります。 これらのメンバーには、コンストラクター、メソッド、プロパティ、およびフィールドがあります。 変数のメンバー (コンストラクターを除く) にアクセスするときは、オブジェクトのメソッドやプロパティにアクセスするときと同じ方法を使用できます。

次の例では、現在の月に残っている日数を決定するために、Year プロパティ、Month プロパティ、および Day プロパティ、および System.DateTime 構造体の DaysInMonth メソッドが使用されています。

Dim current As Date = Now
Dim daysRemaining As Integer
daysRemaining = Date.DaysInMonth(current.Year, current.Month) - current.Day

データ型のメンバーへの参照は、型の名前 (Date) またはその型に宣言された変数の名前 (current) で修飾する必要があります。

データ型メンバーの例

次のコード プロトタイプでは、データ型で有効なメソッド、プロパティ、およびフィールドの一部を示します。

<Char>.IsDigit() ' Returns True if character is a numeric digit.

<Char>.IsLower() ' Returns True if character is a lowercase letter.

<Date>.IsLeapYear() ' Returns True if current year is a leap year.

<Date>.ToUniversalTime() ' Returns local date/time converted to UTC.

<Double>.IsInfinity() ' Returns True if contents represent infinity.

<Double>.IsNaN() ' Returns True if contents are not a number (0/0).

<Long>.MaxValue ' Constant representing largest positive Int64 value.

<Object>.GetType() ' Returns Type object representing type of <Object>.

<Object>.GetType().GetTypeCode() ' Returns type code of <Object>.

<String>.Chars(<index>) ' Character at position <index> of <String>.

<String>.Length ' Number of characters currently in <String>.

Byte および Char を含むすべての数値型は、MaxValue および MinValue の各パブリック フィールドを公開します。これらのフィールドは、数値型を扱うときに便利です。

保証されていない、データ型メンバーの同等物

.NET Framework には、Visual Basic の関数やキーワードと同じような、データ型に対する複数のメソッドも用意されています。 しかし、Visual Basic では、変換や他の操作を実行するために .NET Framework メソッドが常に使用されるとは限りません。また、結果が常に同じであるとは限りません。

たとえば、ToSingle メソッドでは、CSng キーワードが Decimal 式に対して行うアクションと、同じ型のアクションが実行されます。 しかし、CSng が、System.dataType.ToSingle を使用するとは限らないため、微妙な条件の下では、結果が同じになる保証はありません。

一般的には、Visual Basic プログラミング要素の方が使いやすく、コードがより読みやすくなるため、こちらを使用する必要があります。 .NET Framework メソッドによって用意されている、追加の機能が必要な場合もあります。 この例については、「データ型のトラブルシューティング (Visual Basic)」の「Mod 演算子が正確な結果を返さない」を参照してください。

関連項目

語句

定義

Visual Basic におけるデータ型

Visual Basic データ型を示し、その使用方法について説明します。

データ型の概要 (Visual Basic)

Visual Basic で用意されている基本データ型を一覧で紹介します。

Visual Basic における型変換

型変換について説明します。型変換とは、値のデータ型を変更するプロセスです。

構造体 (Visual Basic)

構造体について説明します。構造体は、Structure キーワードを使用して宣言されるユーザー定義型です。

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

データ型を使用して実行を高速化する方法について説明します。

オブジェクト型 (Object)

Object データ型について説明します。このデータ型は、任意のデータ型のデータを参照するために使用できます。

参照

Boolean

Byte

Char

DateTime

Decimal

Double

Guid

TimeZone