次の方法で共有


暗黙の型変換と明示的な型変換

更新 : 2007 年 11 月

暗黙の型変換では、ソース コードに特殊な構文は不要です。次の例では、Visual Basic は、k の値を暗黙的に単精度の浮動小数点値に変換してから q に代入しています。

Dim k As Integer
Dim q As Double
' Integer widens to Double, so you can do this with Option Strict On.
k = 432
q = k

明示的な型変換では、型変換キーワードを使用します。Visual Basic には、このようなキーワードが複数用意されており、かっこ内に指定した式を目的のデータ型に変換できます。これらのキーワードは関数のように動作しますが、コンパイラによってコード インラインが生成されるため、実行速度は関数呼び出しよりも多少速くなります。

次に示すのは上の例の続きですが、CInt キーワードによって q の値を整数に変換してから、k に代入しています。

' q had been assigned the value 432 from k.
q = Math.Sqrt(q)
k = CInt(q)
' k now has the value 21 (rounded square root of 432).

型変換のキーワード

次の表は、使用できる変換キーワードを示しています。

型変換キーワード

変換後のデータ型

変換できる式のデータ型

CBool

ブール型 (Boolean) (Visual Basic)

すべての数値型 (Byte、SByte、および列挙型を含む)、String、Object

CByte

バイト型 (Byte) (Visual Basic)

すべての数値型 (SByte および列挙型を含む)、Boolean、String、Object

CChar

文字型 (Char) (Visual Basic)

String, Object

CDate

日付型 (Date) (Visual Basic)

String, Object

CDbl

倍精度浮動小数点数型 (Double) (Visual Basic)

すべての数値型 (Byte、SByte、および列挙型を含む)、Boolean、String、Object

CDec

10 進型 (Decimal) (Visual Basic)

すべての数値型 (Byte、SByte、および列挙型を含む)、Boolean、String、Object

CInt

整数型 (Integer) (Visual Basic)

すべての数値型 (Byte、SByte、および列挙型を含む)、Boolean、String、Object

CLng

Long データ型 (Visual Basic)

すべての数値型 (Byte、SByte、および列挙型を含む)、Boolean、String、Object

CObj

オブジェクト型 (Object)

任意の型

CSByte

SByte 型 (Visual Basic)

すべての数値型 (Byte および列挙型を含む)、Boolean、String、Object

CShort

Short 型 (Visual Basic)

すべての数値型 (Byte、SByte、および列挙型を含む)、Boolean、String、Object

CSng

単精度浮動小数点型 (Single) (Visual Basic)

すべての数値型 (Byte、SByte、および列挙型を含む)、Boolean、String、Object

CStr

文字列型 (String) (Visual Basic)

すべての数値型 (Byte、SByte、および列挙型を含む)、Boolean、Char、Char 配列、Date、Object

CType

コンマ (,) の後に指定する型

基本データ型 (基本型の配列を含む) に変換する場合は、対応する変換キーワードで使用できるのと同じ型。

複合データ型に変換する場合は、それが実装するインターフェイス、およびそれが継承するクラス。

CType をオーバーロードしたクラスまたは構造体に変換する場合は、そのクラスまたは構造体

CUInt

UInteger データ型

すべての数値型 (Byte、SByte、および列挙型を含む)、Boolean、String、Object

CULng

ULong データ型 (Visual Basic)

すべての数値型 (Byte、SByte、および列挙型を含む)、Boolean、String、Object

CUShort

UShort 型 (Visual Basic)

すべての数値型 (Byte、SByte、および列挙型を含む)、Boolean、String、Object

CType 関数

CType 関数 は 2 つの引数について実行されます。最初の引数は変換対象の式であり、2 番目の引数は変換先のデータ型またはオブジェクト クラスです。最初の引数は、型ではなく、式である必要があることに注意してください。

CType はインライン関数です。つまり、変換を行うコードはコンパイルによって生成されます。多くの場合、このコードに関数呼び出しは含まれていません。これにより、パフォーマンスが向上します。

CType とその他の型変換キーワードとの比較については、「DirectCast」および「TryCast」を参照してください。

基本型

次の例は CType の使い方を示しています。

k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)

複合型

CType を使用して、値を複合データ型および基本型に変換できます。また、次の例のように、オブジェクト クラスをそのインターフェイスの型に強制的に変換することもできます。

' Assume class cZone implements interface iZone.
Dim h As Object
' The first argument to CType must be an expression, not a type.
Dim cZ As cZone
' The following statement coerces a cZone object to its interface iZone.
h = CType(cZ, iZone)

配列型

CType は、次の例のように配列データ型を変換することもできます。

Dim v() As classV
Dim obArray() As Object
' Assume some object array has been assigned to obArray.
' Check for run-time type compatibility.
If TypeOf obArray Is classV()
    ' obArray can be converted to classV.
    v = CType(obArray, classV())
End If

使用例を含む詳細については、「配列の変換」を参照してください。

CType を定義する型

独自に定義したクラスや構造体に対して CType を定義できます。これによって、独自のクラスや構造体の型と別の型の間で値を相互に変換できます。使用例を含む詳細については、「方法 : 変換演算子を定義する」を参照してください。

kca3w8x6.alert_note(ja-jp,VS.90).gifメモ :

変換キーワードと共に使用する値は、変換先のデータ型において有効な値である必要があります。有効でない場合はエラーが発生します。たとえば、長整数型 (Long)整数型 (Integer) に変換する場合は、その長整数型 (Long) の値が整数型 (Integer) の有効範囲内に含まれている必要があります。

kca3w8x6.alert_caution(ja-jp,VS.90).gif注意 :

あるクラス型から別のクラス型に変換する CType を指定する場合、変換先の型が変換元の型から派生した型でなければ、実行時に失敗します。そのようなエラーが発生すると、InvalidCastException 例外がスローされます。

ただし、型の一方が独自に定義した構造体またはクラスであり、その構造体またはクラスに CType が定義してある場合、この CType の要件を満たしていれば変換は正常に実行されます。方法 : 変換演算子を定義する を参照してください。

明示的な型変換は、ある式から指定のデータ型またはオブジェクト クラスへのキャストとも呼ばれます。

参照

処理手順

方法 : Visual Basic でオブジェクトを別の型に変換する

データ型のトラブルシューティング

概念

変換時の値の変化

文字列とその他の型との変換

Visual Basic での型宣言を省略したプログラミング

参照

データ型の概要 (Visual Basic)

データ型変換関数

その他の技術情報

Visual Basic における型変換

構造体 : 独自のデータ型