Conversiones implícita y explícita (Visual Basic)

Una conversión implícita no requiere ninguna sintaxis especial en el código fuente. En el ejemplo siguiente, Visual Basic convierte implícitamente el valor de k en un valor de punto flotante de precisión sencilla antes de asignarlo a 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

Una conversión explícita usa una palabra clave de conversión de tipos. Visual Basic proporciona varias palabras clave de este tipo, las cuales convierten una expresión entre paréntesis al tipo de datos deseado. Estas palabras clave actúan como funciones, pero el compilador genera el código alineado, por lo que la ejecución es ligeramente más rápida que con una llamada de función.

En la siguiente extensión del ejemplo anterior, la palabra clave CInt convierte el valor de q de nuevo en un entero antes de asignarlo a 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).

Palabras clave para conversiones

En la siguiente tabla se muestran las palabras clave de conversión disponibles.

Palabra clave de conversión de tipos Convierte una expresión en un tipo de datos Tipos de datos permitidos de expresión que se van a convertir
CBool Tipo de datos Boolean Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerados), String, Object
CByte Tipo de datos Byte Cualquier tipo numérico (incluidos SByte y los tipos enumerados), Boolean, String, Object
CChar Tipo de datos Char String, Object
CDate Date (tipo de datos) String, Object
CDbl Tipo de datos Double Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerados), Boolean, String, Object
CDec Tipo de datos Decimal Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerados), Boolean, String, Object
CInt Integer (tipo de datos) Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerados), Boolean, String, Object
CLng Tipo de datos Long Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerados), Boolean, String, Object
CObj Object Data Type Cualquier tipo
CSByte Tipo de datos SByte Cualquier tipo numérico (incluidos Byte y los tipos enumerados), Boolean, String, Object
CShort Tipo de datos Short Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerados), Boolean, String, Object
CSng Tipo de datos Single Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerados), Boolean, String, Object
CStr String (tipo de datos) Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerados), Boolean, Char, la matriz Char, Date, Object
CType Tipo especificado después de la coma (,) Al convertir en un tipo de datos básico (incluida una matriz de un tipo básico), los mismos tipos que se permiten para la palabra clave de conversión correspondiente

Al convertir en un tipo de datos compuesto, las interfaces que implementa y las clases de las que se hereda

Al convertir en una clase o estructura en la que se ha sobrecargado CType, esa clase o estructura
CUInt Tipo de datos UInteger Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerados), Boolean, String, Object
CULng Tipo de datos ULong Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerados), Boolean, String, Object
CUShort Tipo de datos UShort Cualquier tipo numérico (incluidos Byte, SByte y los tipos enumerados), Boolean, String, Object

La función CType

La función CType funciona en dos argumentos. El primero es la expresión que se va a convertir y el segundo es el tipo de datos de destino o la clase de objeto. Tenga en cuenta que el primer argumento debe ser una expresión, no un tipo.

CType es una función insertada, lo que significa que el código compilado realiza la conversión, a menudo sin generar una llamada de función. De este modo se aumenta el rendimiento.

Para obtener una comparación de CType con las otras palabras clave de conversión de tipos, consulte DirectCast (Operador) y TryCast (Operador).

Tipos básicos

El siguiente ejemplo muestra el uso de CType.

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

Tipos compuestos

Puede usar CType para convertir valores en tipos de datos compuestos, así como en tipos básicos. También puede usarlo para convertir una clase de objeto al tipo de una de sus interfaces, como en el ejemplo siguiente.

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

Tipos de matriz

CType también puede convertir tipos de datos de matriz, como en el ejemplo siguiente.

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

Para obtener más información y un ejemplo, consulte Conversiones de matrices.

Tipos que definen CType

Puede definir CType en una clase o estructura que haya definido. Esto le permite convertir valores en el tipo de la clase o estructura o desde este. Para obtener más información y un ejemplo, consulta Cómo: Definir un operador de conversión.

Nota

Los valores usados con una palabra clave de conversión deben ser válidos para el tipo de datos de destino o se producirá un error. Por ejemplo, si intenta convertir un valor Long en Integer, el valor de Long debe estar dentro del intervalo válido para el tipo de datos Integer.

Precaución

Si se especifica CType para convertir de un tipo de clase a otro, se producirá un error en tiempo de ejecución si el tipo de origen no se deriva del tipo de destino. Este error produce una excepción InvalidCastException.

Sin embargo, si uno de los tipos es una estructura o clase que ha definido y, si ha definido CType en esa estructura o clase, una conversión puede realizarse correctamente si cumple los requisitos de su CType. Consulte Cómo: Definir un operador de conversión.

La realización de una conversión explícita también se conoce como conversión de una expresión en un tipo de datos o una clase de objeto determinada.

Consulte también