?
快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

下载长沙麻将免费版:金佰利国际真人在线:对VB6的后期绑定和前期绑定的一点看法

?

长沙转转麻将必胜口诀 www.fv7j.com.cn 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

3D金佰利国际真人在线im 金佰利国际真人在线objC1 As Ne金佰利国际真人在线w Class1

4Set objTest = objC1

5objTest.Update

6

7Dim objC2 As New Class2

8Set objTest = objC2

9objC2.Test

10

这样,无须承袭机制,也可以获得抽象接口的上风,而使接口、实现分离。

第二,在调用外部的COM自动化组件时,如Office,假如经由过程这种要领调用,对付不合版本的Office,假如你调用的措施、属性都是存在的,那么可以适应不合版本的Office,但假如经由过程前期绑定,在项目引用中确定工具类型,是有版本兼容问题的。

3. 效率和劣势

着实最主要的劣势是效率问题,《Advanced Visual Basic 6》一书说,应用Variant变量和Long变量进行轮回,效率区别是1.5倍,而没有别人觉得的那么大年夜,而且对付大年夜工具,区别也不是很大年夜。对付本文前边的例子,假如创建的是进程内工具,前期绑定和后期绑定调用效率区别大年夜概2:3阁下,也便是说也是1.5倍。对付调用Office这样的外部COM自动化工具,大概区别大年夜一些,没有专门测试,不过对付Office自动化,速率主如果抉择于Office本身的启动、初始化。

别的一个劣势是没有了IDE下的属性、措施成员自动列出。

以是,小我觉得,在应用VB6的时刻,为了获得好的设计,无意偶尔不妨应用一些VB6的后期绑定的特点,来前进设计质量。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: