Ligação precoce e tardia (Visual Basic)
O compilador Visual Basic executa um processo chamado binding
quando um objeto é atribuído a uma variável de objeto. Um objeto é precocemente ligado quando é atribuído a uma variável declarada como sendo de um tipo de objeto específico. Os primeiros objetos ligados permitem ao compilador alocar memória e executar outras otimizações antes de uma aplicação ser executada. Por exemplo, o seguinte fragmento de código declara uma variável como do 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)
Porque FileStream é um tipo de objeto específico, a instância atribuída FS
está ligada precocemente.
Em contrapartida, um objeto é atrasado quando é atribuído a uma variável declarada como sendo do tipo Object
. Objetos deste tipo podem conter referências a qualquer objeto, mas não possuem muitas das vantagens dos objetos ligados precocemente. Por exemplo, o seguinte fragmento de código declara uma variável de objeto para manter um objeto devolvido pela função 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
Vantagens da Ligação Antecipada
Deve utilizar objetos precoces sempre que possível, porque permitem que o compilador faça otimizações importantes que produzam aplicações mais eficientes. Os objetos ligados ao início são significativamente mais rápidos do que os objetos tardios e facilitam a leitura e manutenção do seu código, indicando exatamente que tipo de objetos estão a ser utilizados. Outra vantagem para a ligação antecipada é que permite funcionalidades úteis como a conclusão automática de código e a Ajuda Dinâmica porque o ambiente de desenvolvimento integrado Visual Studio (IDE) pode determinar exatamente com que tipo de objeto está a trabalhar à medida que edita o código. A ligação precoce reduz o número e a gravidade dos erros de tempo de execução porque permite que o compilador reporte erros quando um programa é compilado.
Nota
A ligação tardia só pode ser utilizada para aceder a membros do tipo que são declarados como Public
. Aceder aos membros declarados como Friend
ou Protected Friend
resulta num erro de tempo de execução.