早期绑定和后期绑定 (Visual Basic)

将对象分配给对象变量时,Visual Basic 编译器会执行称为binding的过程。 如果对象被分配给声明为特定对象类型的变量,就是早期绑定对象。 借助早期绑定对象,编译器可以在应用程序执行前分配内存并执行其他优化。 例如,下面的代码片段将变量声明为类型 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)

由于 FileStream 是特定对象类型,因此分配给 FS 的实例就是早期绑定对象。

相反,如果对象被分配给声明为 Object 类型的变量,就是晚期绑定对象。 虽然这种类型的对象可保留对任何对象的引用,但却没有早期绑定对象的诸多优点。 例如,下面的代码片段将对象变量声明为保留 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

早期绑定的优点

应尽量使用早期绑定对象,因为这样编译器可以执行重要优化,从而大大提升应用程序的工作效率。 早期绑定对象的速度远超晚期绑定对象,并明确指出在使用的对象类型,使得代码更易于阅读和维护。 早期绑定的另一个优点是,可启用自动代码填充和动态帮助等实用功能,因为 Visual Basic 集成开发环境 (IDE) 可准确确定你在编辑代码时使用的对象类型。 早期绑定降低了运行时错误的数量和严重性,因为它允许编译器在编译程序时报告错误。

注意

晚期绑定只能用于访问声明为 Public 的类型成员。 访问声明为 FriendProtected Friend 的成员会导致生成运行时错误。

另请参阅