Implicit and Explicit Conversions (Visual Basic)
Updated: July 20, 2015
For the latest documentation on Visual Studio 2017 RC, see Visual Studio 2017 RC Documentation.
An implicit conversion does not require any special syntax in the source code. In the following example, Visual Basic implicitly converts the value of
k to a single-precision floating-point value before assigning it to
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 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.
In the following extension of the preceding example, the
CInt keyword converts the value of
q back to an integer before assigning it to
' 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).
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|
|Boolean Data Type||Any numeric type (including |
|Byte Data Type||Any numeric type (including |
|Char Data Type|
|Date Data Type|
|Double Data Type||Any numeric type (including |
|Decimal Data Type||Any numeric type (including |
|Integer Data Type||Any numeric type (including |
|Long Data Type||Any numeric type (including |
|Object Data Type||Any type|
|SByte Data Type||Any numeric type (including |
|Short Data Type||Any numeric type (including |
|Single Data Type||Any numeric type (including |
|String Data Type||Any numeric type (including |
|Type specified following the comma (||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
When converting to a class or structure on which you have overloaded
|UInteger Data Type||Any numeric type (including |
|ULong Data Type||Any numeric type (including |
|UShort Data Type||Any numeric type (including |
The CType Function operates on two arguments. 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 is an inline function, meaning the compiled code makes the conversion, often without generating a function call. This improves performance.
The following example demonstrates the use of
k = CType(q, Integer) ' The following statement coerces w to the specific object class Label. f = CType(w, Label)
You can use
CType to convert values to composite data types as well as to elementary types. 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)
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.
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. For example, if you attempt to convert a
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.
Type Conversions in Visual Basic
Conversions Between Strings and Other Types
How to: Convert an Object to Another Type in Visual Basic
Type Conversion Functions
Troubleshooting Data Types