什么是绑定?什么是前期绑定?什么是后期绑定?为什么后期绑定隐式使用反射?

来源:百度知道 编辑:UC知道 时间:2024/06/01 18:45:32
什么是绑定?什么是前期绑定?什么是后期绑定?
最好能对这一段代码作出解释(VB.NET):
Dim o As Object
Dim s2 As String
o = s2
MsgBox(o.Length)
(Length是String类的成员而非Object类的成员,String类继承自Object类)
为什么说这段代码使用的是后期绑定呢?
还有,为什么说后期绑定的效率比前期绑定低?
为什么说在.net下,后期绑定会隐式使用反射?
听说使用“强类型”可以避免后期绑定,是真的吗?如果可以,如何实现?
那位高手回答一下,感激不尽!
还有,请尽量用浅显的语言,谢谢!

后期绑定:若将一个变量声明为 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 和应用程序中使用这种方法来声明对象变量。

使用前期绑定还是后期绑定完全取决于声明变量的方式。对象的创建方式对此没有任何影响。

后期绑定的几个优势和好处

第一,个人认为,由于VB6不支持实现继承,对于某些设计,可以使用将对象定义为Variant变量,而获取某些设计和编码上的便利,而得到接口或抽象类的好处。例如:

如定义2个类:

Class1:

1Option Explicit
2
3Public Sub Update()
4 MsgBox "Class1 Updated"
5End Sub

Class2:
<