En Visual Basic 2005, como en la mayoría de los actuales lenguajes orientados a objetos y, en particular, aquellos que generan aplicaciones para la plataforma .NET, las variables que van a contener referencias a objetos se declaran con un tipo concreto, lo cual facilita su uso porque al conocerse el tipo durante la fase de diseño, el compilador puede efectuar comprobaciones estrictas y evitar ciertos tipos de errores. En ocasiones, sin embargo, nos encontraremos en la necesidad de convertir referencias genéricas, de tipo Object
, a tipos concretos. Es lo que ocurre, por ejemplo, al recuperar objetos almacenados en listas, controles ListBox
o TreeView
, o bien ciertas estructuras de datos, como ArrayList
.
En Visual Basic 6 la conversión de tipos se llevaba a cabo con la función CType()
, mientras que en Visual Basic .NET apareció la función DirectCast()
. Ambas se comportan de manera similar y permiten efectuar una conversión de tipo siempre que exista una relación, ya sea de herencia entre clases o de interfaces, entre el tipo real del objeto y el tipo al que quiere convertirse. Si esa conversión no es posible, ambas funciones producen una excepción. En la práctica esto nos obliga a utilizar un bloque Try
/Catch
, para controlar la posible excepción, siempre que vayamos a intentar una conversión.
En Visual Basic 2005 existe una alternativa: la función TryCast()
. Ésta también convierte referencias a objetos de unos tipos a otros, pero si la conversión no es posible no se genera excepción alguna, sino que simplemente se devuelve el valor Nothing
. Esto nos permite escribir código como el siguiente:
objeto = TryCast(genérico, específico) If objeto IsNot Nothing Then objeto.método End If
No es necesario, por tanto, utilizar el control estructurado de excepciones para evitar que, si la conversión falla, el programa pueda llegar a interrumpir su ejecución.
Torre de Babel - Francisco Charte Ojeda - Desde 1997 en la Web