Associazione anticipata e tardiva (Visual Basic)

Il compilatore Visual Basic esegue un processo chiamato binding quando un oggetto viene assegnato a una variabile di oggetto. Un oggetto è ad associazione anticipata quando viene assegnato a una variabile di un tipo object specifico. Gli oggetti ad associazione anticipata consentono al compilatore di allocare memoria ed effettuare altre ottimizzazioni prima dell'esecuzione di un'applicazione. Il frammento di codice seguente, ad esempio, dichiara una variabile di 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)

Poiché FileStream è un tipo object specifico, l'istanza assegnata a FS è ad associazione anticipata.

Al contrario, un oggetto è ad associazione tardiva quando viene assegnato a una variabile dichiarata di tipo Object. Gli oggetti di questo tipo possono contenere riferimenti a qualsiasi oggetto, ma non presentano molti dei vantaggi offerti dagli oggetti ad associazione anticipata. Il frammento di codice seguente, ad esempio, dichiara una variabile oggetto contenente un oggetto restituito dalla funzione 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

Vantaggi offerti dall'associazione anticipata

Quando possibile, è consigliabile usare oggetti ad associazione anticipata. Tali oggetti consentono infatti al compilatore di eseguire ottimizzazioni significative che aumentano l'efficienza delle applicazioni. Gli oggetti ad associazione anticipata sono notevolmente più veloci di quelli ad associazione tardiva e facilitano la lettura e la gestione del codice dichiarando esattamente il tipo degli oggetti usati. Un altro vantaggio per l'associazione anticipata è che consente funzionalità utili, ad esempio il completamento automatico del codice e la Guida dinamica, perché l'ambiente di sviluppo integrato Visual Studio (IDE) può determinare esattamente il tipo di oggetto usato durante la modifica del codice. L'associazione anticipata riduce il numero e la gravità degli errori di run-time poiché consente al compilatore di segnalare gli errori al momento della compilazione di un programma.

Nota

L'associazione tardiva può essere usata soltanto per accedere ai membri di tipi che vengono dichiarati come Public. L'accesso a membri dichiarati come Friend o Protected Friend determina un errore di run-time.

Vedi anche