暗黙的な変換では、ソース コードに特別な構文は必要ありません。 次の例では、 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
キーワードは、k
に割り当てる前に、q
の値を整数に変換します。
' 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 Data Type) | 任意の数値型 ( Byte 、 SByte 、列挙型を含む)、 String 、 Object |
CByte |
バイト データ型 | 任意の数値型 ( SByte および列挙型を含む)、 Boolean 、 String 、 Object |
CChar |
Char データ型 |
String 、Object |
CDate |
日付データ型 |
String 、Object |
CDbl |
Double データ型 | 任意の数値型 ( Byte 、 SByte 、列挙型を含む)、 Boolean 、 String 、 Object |
CDec |
10 進データ型 | 任意の数値型 ( Byte 、 SByte 、列挙型を含む)、 Boolean 、 String 、 Object |
CInt |
整数データ型 | 任意の数値型 ( Byte 、 SByte 、列挙型を含む)、 Boolean 、 String 、 Object |
CLng |
Long データ型 | 任意の数値型 ( Byte 、 SByte 、列挙型を含む)、 Boolean 、 String 、 Object |
CObj |
オブジェクト データ型 | 任意の型 |
CSByte |
SByte データ型 | 任意の数値型 ( Byte および列挙型を含む)、 Boolean 、 String 、 Object |
CShort |
短いデータ型 | 任意の数値型 ( Byte 、 SByte 、列挙型を含む)、 Boolean 、 String 、 Object |
CSng |
単一データ型 | 任意の数値型 ( Byte 、 SByte 、列挙型を含む)、 Boolean 、 String 、 Object |
CStr |
文字列データ型 | 任意の数値型 ( Byte 、 SByte 、列挙型を含む)、 Boolean 、 Char 、 Char 配列、 Date 、 Object |
CType |
コンマの後に指定された型 (, ) |
基本データ型 (基本型の配列を含む) に変換する場合、対応する変換キーワードで使用できる型と同じです 複合データ型に変換する場合、実装するインターフェイスと継承元のクラス CType をオーバーロードしたクラスまたは構造体に変換する場合、そのクラスまたは構造体 |
CUInt |
UInteger データ型 | 任意の数値型 ( Byte 、 SByte 、列挙型を含む)、 Boolean 、 String 、 Object |
CULng |
ULong データ型 | 任意の数値型 ( Byte 、 SByte 、列挙型を含む)、 Boolean 、 String 、 Object |
CUShort |
UShort データ型 | 任意の数値型 ( Byte 、 SByte 、列挙型を含む)、 Boolean 、 String 、 Object |
CType 関数
CType 関数は、2 つの引数で動作します。 1 つ目は変換する式で、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
を定義できます。 これにより、クラスまたは構造体の型との間で値を変換できます。 詳細と例については、「 方法: 変換演算子を定義する」を参照してください。
注
変換キーワードで使用される値は、変換先のデータ型に対して有効である必要があります。または、エラーが発生します。 たとえば、 Long
を Integer
に変換する場合、 Long
の値は、 Integer
データ型の有効な範囲内にある必要があります。
注意事項
ソース型が変換先の型から派生していない場合、実行時にクラス型から別のクラス型に変換する CType
を指定すると失敗します。 このようなエラーにより、 InvalidCastException 例外がスローされます。
ただし、いずれかの型が定義した構造体またはクラスであり、その構造体またはクラスに対して CType
を定義している場合、 CType
の要件を満たしている場合、変換は成功します。 「 方法: 変換演算子を定義する」を参照してください。
明示的な変換の実行は、特定のデータ型またはオブジェクト クラスへの式の キャスト とも呼ばれます。
こちらも参照ください
- Visual Basic における 型変換
- 文字列と他の型の間の変換
- 方法: Visual Basic でオブジェクトを別の型に変換する
- 構造体
- データ型
- 型変換関数
- トラブルシューティング (データ型)
.NET