早期绑定和后期绑定 (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
的类型成员。 访问声明为 Friend
或 Protected Friend
的成员会导致生成运行时错误。