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

金佰利國際真人在線:對VB6的后期綁定和前期綁定的一點看法

?

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的后期綁定的特點,來前進設計質量。

免責聲明:以上內容源自網絡,版權歸原作者所有,如有侵犯您的原創版權請告知,我們將盡快刪除相關內容。

您可能還會對下面的文章感興趣:

浙江体彩20选5开奖号 江西十一选五现场直播 中国足球队队员名单 中国5分彩 吉林11选5开奖 广西快乐十分钟 澳洲幸运5怎么玩 一定牛贵州快三 炒股软件开发 我查云南十一选五开奖结果 幸运pk10盈利技巧 血流麻将怎么玩 股票融资公司有哪些 快乐10分钟开奖查询 德国赛车91计划网pk10飞艇 福建快3走势图今天 正规股票配资平台