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

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


' 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

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

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.

### 基本型Elementary Types

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

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 を定義する型Types Defining CType

ソース型が変換先の型から派生していない場合、あるクラス型から別の型に変換する 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. 方法: 変換演算子を定義する」を参照してください。