Compartir a través de


Recomendación de actualización: utilizar enlace en tiempo de compilación y conversiones explícitas

Actualización: noviembre 2007

Tanto Visual Basic 6.0 como Visual Basic 2008 admiten el uso de objetos enlazados en tiempo de ejecución, que es la práctica de declarar una variable como tipo de datos Object y asignarla a una instancia de una clase en tiempo de ejecución. Sin embargo, durante el proceso de actualización, los objetos enlazados en tiempo de ejecución pueden provocar problemas al resolver propiedades predeterminadas o en aquellos casos en que el modelo de objetos subyacente haya cambiado y sea necesario convertir propiedades, métodos y eventos. Por ejemplo, suponga que tiene un formulario denominado Form1 con una etiqueta denominada Label1; el siguiente código de Visual Basic 6.0 establecería el título de la etiqueta en "SomeText":

Dim o As Object
Set o = Me.Label1
o.Caption = "SomeText"

En Visual Basic 2008, la propiedad Caption de un control de etiqueta se ha reemplazado por la propiedad Text. Al actualizar el código, todas las instancias de la propiedad Caption se cambian a Text, pero como hay un objeto de enlace en tiempo de ejecución sin tipo, Visual Basic no puede detectar de qué tipo de objeto se trata ni si hay que traducir alguna propiedad. En estos casos, tendrá que cambiar el código manualmente después de la actualización.

Si rescribe el código con objetos de enlace en tiempo de compilación, se actualizará automáticamente:

Dim o As Label
Set o = Me.Label1
o.Text = "SomeText"

Siempre que sea posible, es recomendable declarar las variables del tipo de objeto correspondiente en lugar de declararlas simplemente como el tipo de datos Object.

En los casos en que se utilicen variables Object y Variant en el código de Visual Basic 6.0, es recomendable utilizar conversiones explícitas al asignar las variables, ejecutar operaciones sobre ellas o transferirlas a una función. Por ejemplo, la intención de la operación "+" en el código siguiente no está clara:

Dim Var1 As Variant
Dim Var2 As Variant
Dim Var3 As Variant
Var1 = "3"
Var2 = 4
'BAD: Should Var1 and Var2 be added as strings or integers?
Var3 = Var1 + Var2

El ejemplo anterior puede producir un error en tiempo de ejecución en Visual Basic 2008. Si rescribe la línea final para que utilice conversiones explícitas, se asegurará de que el código funcione:

'GOOD: explicit conversion
Var3 = CInt(Var1) + CInt(Var2)

Visual Basic 2008 admite funciones de sobrecarga basándose en el tipo de parámetro. Por ejemplo, la función Environ tiene ahora dos formas:

Environ( Expression As Integer) As String
Environ( Expression As String ) As String

Visual Basic 2008 determina qué función debe llamarse basándose en el tipo de parámetro. Si se transfiere un entero a Environ(), se llamará a la versión de enteros; si se pasa una cadena, se llamará a la versión de cadenas. El código que transfiere un tipo de datos Variant u Object a una función sobrecargada puede generar errores de compilación o en tiempo de ejecución. Si se utiliza una conversión explícita, como en el ejemplo siguiente, el código funcionará como se espera una vez que se actualice a Visual Basic 2008:

Dim a As String
Dim v As Variant
v = "Path"
'GOOD: explicit conversion
a = Environ(CStr(v))

El uso de conversiones explícitas de objetos de enlace en tiempo de ejecución es una buena costumbre al escribir código. De este modo, resulta más fácil determinar el propósito del código y actualizar el proyecto a Visual Basic 2008.

Vea también

Otros recursos

Recomendaciones del lenguaje para la actualización