.NET Framework 型のデータ型
更新 : 2007 年 11 月
Visual Basic のすべての基本データ型は、System 名前空間の構造体またはクラスによってサポートされています。コンパイラでは、基になる構造体またはクラスに対して各データ型のキーワードをエイリアスとして使用します。たとえば、予約語 Byte を使用する変数の宣言は、完全修飾構造体名 System.Byte を使用する宣言と同じです。
.NET Framework で利用できる、追加のクラスおよび構造体
共通言語ランタイム (CLR: Common Language Runtime) では、Visual Basic に用意されていない構造体とクラスもサポートされます。たとえば、System.Guid 構造体には、グローバル一意識別子 (GUID: globally unique identifier) が用意されています。また、System.TimeZone クラスでは、タイム ゾーンがサポートされています。これらの型を使用して変数および定数を宣言したり、.NET Framework によってこれらの型に実装されるメソッドにアクセスできます。ただし、Visual Basic に用意されていない型に関連する演算や型変換はサポートされません。
値型と参照型
.NET Framework では、構造体は値型であり、クラスは参照型です。このため、Char および Integer などの値型は、.NET Framework 構造体によって実装されます。また、Object および String などの参照型は、.NET Framework クラスによってサポートされます。メンバが値型であっても、すべての配列は参照型です。また、参照型メンバを持っていたとしても、すべての構造体は値型です。
すべての参照型は基になる .NET Framework のクラスを表すため、初期化する場合には New (Visual Basic) キーワードを使用する必要があります。次のステートメントで配列を初期化します。
Dim totals() As Single = New Single(8) {}
値型を初期化するときにも New キーワードを使用できます。これは、その型にパラメータをとるコンストラクタがある場合に特に有効です。これに関する例は、指定した部分から新しい Decimal 値を作成する、Decimal(Int32, Int32, Int32, Boolean, Byte) コンストラクタです。
メンバを持つデータ型
これらは、.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 メソッドによって用意されている、追加の機能が必要な場合もあります。この例については、「データ型のトラブルシューティング」の「Mod 演算子が正確な結果を返さない」を参照してください。