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.

Confira também