Associação antecipada e tardia (Visual Basic)
O compilador do Visual Basic executa um processo chamado binding
quando um objeto é atribuído a uma variável de objeto. Um objeto é associado inicialmente quando ele é atribuído a uma variável declarada como de um tipo de objeto específico. Os objetos de associação inicial permitem que o compilador aloque memória e execute outras otimizações antes que um aplicativo seja executado. Por exemplo, o seguinte fragmento de código declara que uma variável é 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)
Uma vez que FileStream é um tipo de objeto específico, a instância atribuída a FS
é associada no início.
Por outro lado, um objeto associado tardiamente quando ele é atribuído a uma variável declarada para ser do tipo Object
. Objetos desse tipo podem conter referências a qualquer objeto, mas têm muitas das vantagens de objetos de associação inicial. Por exemplo, o fragmento de código a seguir declara uma variável de objeto para conter um objeto retornado 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 associação inicial
Você deve usar objetos associação inicial sempre que possível, pois eles permitem que o compilador faça otimizações importantes que resultam em aplicativos mais eficientes. Os objetos de associação inicial são significativamente mais rápidos do que objetos de associação tardia e tornam seu código mais fácil de ler e manter informando exatamente quais tipos de objetos estão sendo usados. Outra vantagem da associação antecipada é que ela permite que recursos úteis, como a conclusão de código automática e a Ajuda Dinâmica, pois o IDE (ambiente de desenvolvimento integrado) do Visual Studio pode determinar exatamente com qual tipo de objeto você está trabalhando conforme você edita o código. A associação inicial reduz o número e a gravidade dos erros em tempo de execução porque ela permite que o compilador relate erros quando um programa é compilado.
Observação
A associação tardia só pode ser usada para acessar membros de tipo que são declarados como Public
. Acessando membros declarados como Friend
ou Protected Friend
resulta em um erro em tempo de execução.