暗黙の型変換と明示的な型変換 (Visual Basic)Implicit and Explicit Conversions (Visual Basic)

暗黙の型変換では、ソースコードに特別な構文は必要ありません。An implicit conversion does not require any special syntax in the source code. 次の例では、Visual Basic を qに割り当てる前に、k の値を単精度浮動小数点値に暗黙的に変換します。In the following example, Visual Basic implicitly converts the value of k to a single-precision floating-point value before assigning it to 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

明示的な変換では、型変換キーワードを使用します。An explicit conversion uses a type conversion keyword. Visual Basic には、かっこ内の式を目的のデータ型に強制的に変換するいくつかのキーワードが用意されています。Visual Basic provides several such keywords, which coerce an expression in parentheses to the desired data type. これらのキーワードは関数と同様に機能しますが、コンパイラによってインラインでコードが生成されるため、関数呼び出しの場合よりも実行速度が若干速くなります。These keywords act like functions, but the compiler generates the code inline, so execution is slightly faster than with a function call.

前の例の次の拡張機能では、CInt キーワードは、q の値を kに割り当てる前に、整数に変換します。In the following extension of the preceding example, the CInt keyword converts the value of q back to an integer before assigning it to 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).

変換キーワードConversion Keywords

次の表は、使用可能な変換キーワードを示しています。The following table shows the available conversion keywords.

型変換キーワードType conversion keyword 式をデータ型に変換します。Converts an expression to data type 変換する式の許容データ型Allowable data types of expression to be converted
CBool Boolean データ型Boolean Data Type 任意の数値型 (ByteSByte、列挙型など)、StringObjectAny numeric type (including Byte, SByte, and enumerated types), String, Object
CByte Byte データ型Byte Data Type 任意の数値型 (SByte と列挙型を含む)、BooleanStringObjectAny numeric type (including SByte and enumerated types), Boolean, String, Object
CChar Char データ型Char Data Type String, ObjectString, Object
CDate Date データ型Date Data Type String, ObjectString, Object
CDbl Double 型Double Data Type 任意の数値型 (ByteSByte、列挙型など)、BooleanStringObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CDec Decimal データ型Decimal Data Type 任意の数値型 (ByteSByte、列挙型など)、BooleanStringObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CInt Integer データ型Integer Data Type 任意の数値型 (ByteSByte、列挙型など)、BooleanStringObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CLng Long データ型Long Data Type 任意の数値型 (ByteSByte、列挙型など)、BooleanStringObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CObj Object データ型Object Data Type 任意の型Any type
CSByte SByte データ型SByte Data Type 任意の数値型 (Byte と列挙型を含む)、BooleanStringObjectAny numeric type (including Byte and enumerated types), Boolean, String, Object
CShort Short データ型Short Data Type 任意の数値型 (ByteSByte、列挙型など)、BooleanStringObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CSng Single データ型Single Data Type 任意の数値型 (ByteSByte、列挙型など)、BooleanStringObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CStr String データ型String Data Type 任意の数値型 (ByteSByte、列挙型など)、BooleanCharChar 配列、DateObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, Char, Char array, Date, Object
CType コンマの後に指定された型 (,)Type specified following the comma (,) 基本データ型(基本型の配列を含む) に変換する場合、対応する conversion キーワードで許可されているものと同じ型です。When converting to an elementary data type (including an array of an elementary type), the same types as allowed for the corresponding conversion keyword

複合データ型に変換する場合、それが実装するインターフェイスと継承元のクラスWhen converting to a composite data type, the interfaces it implements and the classes from which it inherits

CTypeオーバーロードされたクラスまたは構造体に変換する場合は、そのクラスまたは構造体When converting to a class or structure on which you have overloaded CType, that class or structure
CUInt UInteger データ型UInteger Data Type 任意の数値型 (ByteSByte、列挙型など)、BooleanStringObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CULng ULong データ型ULong Data Type 任意の数値型 (ByteSByte、列挙型など)、BooleanStringObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object
CUShort UShort データ型UShort Data Type 任意の数値型 (ByteSByte、列挙型など)、BooleanStringObjectAny numeric type (including Byte, SByte, and enumerated types), Boolean, String, Object

CType 関数The CType Function

CType 関数は、2つの引数を操作します。The CType Function operates on two arguments. 1つ目は変換される式で、2番目は変換先のデータ型またはオブジェクトクラスです。The first is the expression to be converted, and the second is the destination data type or object class. 最初の引数は型ではなく、式である必要があることに注意してください。Note that the first argument must be an expression, not a type.

CTypeインライン関数です。つまり、コンパイルされたコードは、多くの場合、関数呼び出しを生成せずに変換を行います。CType is an inline function, meaning the compiled code makes the conversion, often without generating a function call. これにより、パフォーマンスが向上します。This improves performance.

他の型変換キーワードと CType の比較については、「DirectCast 演算子」および「TryCast 演算子」を参照してください。For a comparison of CType with the other type conversion keywords, see DirectCast Operator and TryCast Operator.

基本型Elementary Types

次の例は、CType の使い方を示しています。The following example demonstrates the use of CType.

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

複合型Composite Types

CType を使用すると、値を複合データ型だけでなく基本型にも変換できます。You can use CType to convert values to composite data types as well as to elementary types. また、次の例のように、このメソッドを使用して、オブジェクトクラスをそのインターフェイスの1つの型に強制的に変換することもできます。You can also use it to coerce an object class to the type of one of its interfaces, as in the following example.

' 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)

配列型Array Types

次の例のように、CType 配列のデータ型を変換することもできます。CType can also convert array data types, as in the following example.

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

詳細と例については、「配列の変換」を参照してください。For more information and an example, see Array Conversions.

CType を定義する型Types Defining CType

定義したクラスまたは構造体で CType を定義できます。You can define CType on a class or structure you have defined. これにより、クラスまたは構造体の型との間で値を変換できます。This allows you to convert values to and from the type of your class or structure. 詳細と例については、「方法: 変換演算子を定義する」を参照してください。For more information and an example, see How to: Define a Conversion Operator.

注意

変換キーワードと共に使用する値は、変換先のデータ型に対して有効でなければなりません。または、エラーが発生します。Values used with a conversion keyword must be valid for the destination data type, or an error occurs. たとえば、LongIntegerに変換しようとした場合、Long の値は、Integer データ型の有効な範囲内である必要があります。For example, if you attempt to convert a Long to an Integer, the value of the Long must be within the valid range for the Integer data type.

注意事項

ソース型が変換先の型から派生していない場合、あるクラス型から別の型に変換する CType の指定は実行時に失敗します。Specifying CType to convert from one class type to another fails at run time if the source type does not derive from the destination type. このようなエラーが発生すると、InvalidCastException 例外がスローされます。Such a failure throws an InvalidCastException exception.

ただし、型のいずれかが定義した構造体またはクラスであり、その構造体またはクラスに CType が定義されている場合、CType の要件を満たすと変換が成功する可能性があります。However, if one of the types is a structure or class you have defined, and if you have defined CType on that structure or class, a conversion can succeed if it satisfies the requirements of your CType. 方法: 変換演算子を定義する」を参照してください。See How to: Define a Conversion Operator.

明示的な変換を実行することは、特定のデータ型またはオブジェクトクラスに式をキャストすることとも呼ばれます。Performing an explicit conversion is also known as casting an expression to a given data type or object class.

参照See also