Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
a un valor de punto flotante de simple precisión 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, que fuerzan 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 en línea, por lo que la ejecución es ligeramente más rápida que con una llamada a una función.
En la siguiente extensión del ejemplo anterior, la CInt
palabra clave convierte el valor de q
de vuelta a 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 de conversión
En la tabla siguiente 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 booleano | Cualquier tipo numérico (incluidos Byte los tipos enumerados , SByte y ), String , Object |
CByte |
Tipo de datos Byte | Cualquier tipo numérico (incluidos SByte y tipos enumerados), Boolean , String , Object |
CChar |
Tipo de datos Char |
String , Object |
CDate |
Tipo de datos Date |
String , Object |
CDbl |
Tipo de datos doble | Cualquier tipo numérico (incluidos Byte los tipos enumerados , SByte y ), Boolean , String , Object |
CDec |
Tipo de datos decimal | Cualquier tipo numérico (incluidos Byte los tipos enumerados , SByte y ), Boolean , String , Object |
CInt |
Tipo de datos entero | Cualquier tipo numérico (incluidos Byte los tipos enumerados , SByte y ), Boolean , String , Object |
CLng |
Tipo de datos Long | Cualquier tipo numérico (incluidos Byte los tipos enumerados , SByte y ), Boolean , String , Object |
CObj |
Tipo de datos de objeto | Cualquier tipo |
CSByte |
Tipo de datos SByte | Cualquier tipo numérico (incluidos Byte y tipos enumerados), Boolean , String , Object |
CShort |
Tipo de datos corto | Cualquier tipo numérico (incluidos Byte los tipos enumerados , SByte y ), Boolean , String , Object |
CSng |
Tipo de datos único | Cualquier tipo numérico (incluidos Byte los tipos enumerados , SByte y ), Boolean , String , Object |
CStr |
Tipo de datos de cadena | Cualquier tipo numérico (incluidos Byte , SByte y los tipos enumerados), Boolean , Char , matriz Char , Date , Object |
CType |
Tipo especificado después de la coma (, ) |
Al convertir a un tipo de datos elemental (incluida una matriz de un tipo elemental), 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 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 los tipos enumerados , SByte y ), Boolean , String , Object |
CULng |
Tipo de datos ULong | Cualquier tipo numérico (incluidos Byte los tipos enumerados , SByte y ), Boolean , String , Object |
CUShort |
Tipo de datos de UShort | Cualquier tipo numérico (incluidos Byte los tipos enumerados , SByte y ), Boolean , String , Object |
La función CType
La función CType funciona en dos argumentos. La primera es la expresión que se va a convertir y la segunda 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. Esto mejora el rendimiento.
Para obtener una comparación de CType
con las otras palabras clave de conversión de tipos, vea el Operador DirectCast y el Operador TryCast.
Tipos elementales
En el ejemplo siguiente se 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 elementales. 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, vea Conversiones de matriz.
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, vea 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 produce un error. Por ejemplo, si intenta convertir un Long
en un Integer
, el valor de Long
debe estar dentro del intervalo válido para el tipo de datos Integer
.
Precaución
Si se especifica CType
la conversión de un tipo de clase a otro, se produce un error en tiempo de ejecución si el tipo de origen no se deriva del tipo de destino. Este error produce una InvalidCastException excepción.
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 satisface los requisitos de su CType
. Vea 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 a un tipo de datos o clase de objeto determinado.