En Visual Basic, el problema de la conversión de tipos ha existido desde las primeras versiones del lenguaje y se vuelve especialmente relevante con la llegada de la tipificación estricta y las múltiples jerarquías de clases en .NET.
La tarea principal es garantizar una conversión segura y explícita entre tipos de datos compatibles, teniendo en cuenta el tiempo de ejecución y la posibilidad de errores.
La solución es que en VB.NET se prevén operadores clave de conversión: CType, DirectCast, TryCast.
CType realiza la conversión entre cualquier tipo compatible y puede invocar la implementación de la interfaz IConvertible.DirectCast requiere estrictamente la compatibilidad de tipos en la jerarquía de herencia, no realiza conversión de tipos, solo conversión de referencia.TryCast devuelve Nothing si la conversión es imposible, sin generar excepciones (aplicable solo para tipos de referencia).Ejemplo de código:
Class Animal : End Class Class Dog Inherits Animal End Class Dim a As Animal = New Dog() Dim d1 As Dog = CType(a, Dog) Dim d2 As Dog = DirectCast(a, Dog) Dim d3 As Dog = TryCast(a, Dog) ' d3 es un objeto Dog o Nothing
Características clave:
CType es el más versátil, pero puede lanzar excepciones si la conversión no es posible.DirectCast solo verifica la estricta correspondencia de tipo de referencias.TryCast no genera excepciones, simplemente devuelve Nothing.¿Se puede utilizar TryCast para tipos de valor (Value Types)?
No, TryCast solo funciona con tipos de referencia. Al intentar usarlo para una estructura, habrá un error de compilación.
¿Cuál es la diferencia entre CInt(obj) y CType(obj, Integer)?
Son similares, ambos intentan convertir obj en Integer. Sin embargo, CInt es más estricta con la definición del formato de cadena, y es preferible usar CType cuando hay conversiones explícitas.
¿Cuándo es mejor usar DirectCast en lugar de CType?
Cuando se sabe que los objetos están relacionados a través de una relación de herencia o implementan una interfaz común, y no se requiere realizar una conversión de tipo personalizada. DirectCast es más eficiente, ya que no invoca la lógica de conversión.
En el proyecto, siempre se utiliza CType para cualquier conversión, resultando en excepciones no manejadas cuando los tipos no son compatibles.
Pros:
Contras:
El equipo utiliza diferentes operadores: DirectCast para estructuras de referencia y TryCast al trabajar con objetos desconocidos. Se ha añadido el manejo de Nothing para TryCast.
Pros:
Contras: