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 |
這樣,無須繼承機制,也可以得到抽象接口的優勢,而使接口、實現分離。
第二,在調用外部的COM自動化組件時,如Office,如果通過這種方式調用,對于不同版本的Office,如果你調用的方法、屬性都是存在的,那么可以適應不同版本的Office,但如果通過前期綁定,在項目引用中確定對象類型,是有版本兼容問題的。
3. 效率和劣勢
其實最主要的劣勢是效率問題,《Advanced Visual Basic 6》一書說,使用Variant變量和Long變量進行循環,效率差別是1.5倍,而沒有別人認為的那么大,而且對于大對象,差別也不是很大。對于本文前邊的例子,如果創建的是進程內對象,前期綁定和后期綁定調用效率差別大概2:3左右,也就是說也是1.5倍。對于調用Office這樣的外部COM自動化對象,也許差別大一些,沒有專門測試,不過對于Office自動化,速度主要是決定于Office本身的啟動、初始化。
另外一個劣勢是沒有了IDE下的屬性、方法成員自動列出。
所以,個人認為,在使用VB6的時候,為了得到好的設計,有時不妨使用一些VB6的后期綁定的特性,來提高設計質量。
延伸閱讀
文章來源于領測軟件測試網 http://www.kjueaiud.com/
領測軟件測試網最新更新
關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
技術支持和業務聯系:info@testage.com.cn 電話:010-51297073
老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月