DirectCast (Operador) (Visual Basic)
Presenta una operación de conversión de tipos basada en la herencia o implementación.
Comentarios
DirectCast
no usa las rutinas del asistente en tiempo de ejecución de Visual Basic para la conversión, por lo que puede brindar un rendimiento algo mejor que CType
al convertir en y desde el tipo de datos Object
.
La palabra clave DirectCast
se usa de manera similar a cómo usa la palabra clave de la función CType y del operador TryCast. Se proporciona una expresión como primer argumento y un tipo en el que convertirla como segundo argumento. DirectCast
requiere una relación de herencia o implementación entre los tipos de datos de ambos argumentos. Esto significa que un tipo debe heredar del otro o implementarlo.
Errores
DirectCast
genera un error del compilador si detecta que no existe ninguna relación de herencia o implementación. Pero la ausencia de un error del compilador no garantiza una conversión correcta. Si la conversión deseada se está restringiendo, podría producir un error en tiempo de ejecución. Si esto sucede, el tiempo de ejecución genera un error InvalidCastException.
Palabras clave para conversiones
Una comparación de las palabras clave de conversión de tipos es la siguiente.
Palabra clave | Tipos de datos | Relación de argumento | Error en tiempo de ejecución |
---|---|---|---|
CType Function | Todos los tipos de datos | La conversión de ampliación o restricción debe definirse entre los dos tipos de datos | Genera InvalidCastException |
DirectCast |
Todos los tipos de datos | Un tipo debe heredar del otro o implementarlo | Genera InvalidCastException |
Operador TryCast | Solo los tipos de referencia | Un tipo debe heredar del otro o implementarlo | Devuelve Nothing |
Ejemplo
En el ejemplo siguiente, se muestran dos usos de DirectCast
, uno que genera un error en tiempo de ejecución y otro que se ejecuta correctamente.
Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)
En el ejemplo anterior, el tipo de tiempo de ejecución de q
es Double
. CType
se ejecuta correctamente porque Double
se puede convertir en Integer
. Sin embargo, el primer DirectCast
genera un error en tiempo de ejecución porque el tipo de tiempo de ejecución de Double
no tiene ninguna relación de herencia con Integer
, aunque exista una conversión. El segundo DirectCast
se ejecuta correctamente porque realiza la conversión del tipo Form en el tipo Control, del que Form hereda.