1. 什么是后期绑定和前期绑定后期绑定
MSDN 6的定义如下:
后期绑定:若将一个变量声明为 As Object 或 As Variant(包括 As Form 或 As Control 的变量),Visual Basic 在编译时就无法确定该变量将引用哪种类型的对象。因此,Visual Basic 必须使用后期绑定,在运行时确定对象的属性和方法能否使用该变量。
若使用后期绑定,则每次调用属性或方法时,Visual Basic 都要将成员名传给该对象 IDispatch 接口的 GetIDsOfNames 方法。GetIDsOfNames 返回该成员的派遣 ID,或 DispID。Visual Basic 再将该 DispID 传给 IDispatch 接口的 Invoke 方法来调用该成员。
对进程外部件而言,这意味着一次额外的跨进程方法调用,结果是调用开销翻番。
前期绑定:如果在编译时 Visual Basic 能够知道属性或方法所属的对象,就可以预先查找该成员在类型库中的 DispID 或 vtable 地址。这样就无须在运行时调用 GetIDsOfNames。
当显式声明了变量的类时,例如 As Widget,该变量就只能存放该类的对象的引用。Visual Basic 就可以为该变量调用的所有属性和方法使用前期绑定。
建议在 Visual Basic 和应用程序中使用这种方法来声明对象变量。
使用前期绑定还是后期绑定完全取决于声明变量的方式。对象的创建方式对此没有任何影响。
2. 后期绑定的几个优势和好处
第一,个人认为,由于VB6不支持实现继承,对于某些设计,可以使用将对象定义为Variant变量,而获取某些设计和编码上的便利,而得到接口或抽象类的好处。例如:
如定义2个类:
Class1: 1Option Explicit 2 3Public Sub Update() 4 MsgBox "Class1 Updated" 5End Sub Class2: 1Option Explicit 2 3Public Sub Update() 4 MsgBox "Class2 Updated" 5End Sub |
1Dim objTest As Variant 2 3Dim objC1 As New Class1 4Set objTest = objC1 5objTest.Update 6 7Dim objC2 As New Class2 8Set objTest = objC2 9objC2.Test 10 |
摘自:网络整理
相关文章参考:
★VB取得TextBox、RichTextBox光标所在的行和列(支持汉字)
★VB取得TextBox、RichTextBox光标所在的行和列(支持汉字)
★VB根据窗体自动调整窗体内控件大小 注:实用,可以直接引用
★Visual Basic编程常见问题及解答(1)
★Visual Basic编程常见问题及解答(2)
★Visual Basic编程常见问题及解答(3)
★VisualBasic变量、常数和数据类型及过程概述
★VB6的后期绑定和前期绑定
★VB 计算自己程序段所用时间
★VB 获取路径名各部分 (获取文件路径,获取文件名,获取文件扩展名)自编
★VB 在浏览器中打开指定网址
评论