Enlace en tiempo de compilación y en tiempo de ejecución (Visual Basic)
El compilador de Visual Basic lleva a cabo un proceso denominado binding
cuando se asigna un objeto a una variable de objeto. Un objeto se enlaza de manera anticipada cuando se asigna a una variable que se declara de un tipo de objeto específico. Los objetos enlazados de manera anticipada permiten al compilador asignar memoria y realizar otras optimizaciones antes de que se ejecute la aplicación. Por ejemplo, el fragmento de código siguiente declara que una variable es de tipo FileStream:
' Create a variable to hold a new object.
Dim FS As System.IO.FileStream
' Assign a new object to the variable.
FS = New System.IO.FileStream("C:\tmp.txt",
System.IO.FileMode.Open)
Como FileStream es un tipo de objeto específico, la instancia asignada a FS
se enlaza de manera anticipada.
Por el contrario, un objeto se enlaza en tiempo de ejecución cuando se asigna a una variable que se declara como variable de tipo Object
. Los objetos de este tipo pueden contener referencias a cualquier objeto, pero carecen de muchas de las ventajas de los objetos con enlaces anticipados. Por ejemplo, el fragmento de código siguiente declara una variable de objeto para contener un objeto devuelto por la función CreateObject
:
' To use this example, you must have Microsoft Excel installed on your computer.
' Compile with Option Strict Off to allow late binding.
Sub TestLateBinding()
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
xlApp = CreateObject("Excel.Application")
' Late bind an instance of an Excel workbook.
xlBook = xlApp.Workbooks.Add
' Late bind an instance of an Excel worksheet.
xlSheet = xlBook.Worksheets(1)
xlSheet.Activate()
' Show the application.
xlSheet.Application.Visible = True
' Place some text in the second row of the sheet.
xlSheet.Cells(2, 2) = "This is column B row 2"
End Sub
Ventajas del enlace anticipado
Debe utilizar objetos con enlace anticipado siempre que sea posible, ya que permiten al compilador realizar importantes optimizaciones que producen aplicaciones más eficientes. Los objetos con enlace anticipado son considerablemente más rápidos que los objetos con enlace en tiempo de ejecución y permiten que el código sea más fácil de leer y mantener, ya que declaran exactamente qué clase de objetos se están utilizando. Otra ventaja del enlace en tiempo de compilación es que habilita características útiles como la finalización automática de código y la Ayuda dinámica, porque el entorno de desarrollo integrado (IDE) de Visual Studio puede determinar exactamente con qué tipo de objeto se está trabajando mientras se edita el código. El enlace anticipado reduce el número y la gravedad de los errores en tiempo de ejecución porque permite que el compilador notifique errores cuando se compila un programa.
Nota
El enlace en tiempo de ejecución solo puede utilizarse para acceder a miembros de tipo declarados como Public
. El acceso a miembros declarados como Friend
o Protected Friend
produce un error en tiempo de ejecución.