VB6的后期綁定和前期綁定
1. 什么是后期綁定和前期綁定后期綁定
MSDN 6的定義如下:
后期綁定:若將一個變量聲明為 As Object 或 As Variant(包括 As Form 或 As Control 的變量),Visual Basic 在編譯時就無法確定該變量將引用哪種類型的對象。因此,Visual Basic 必須使用后期綁定,在運行時確定對象的屬性和方法能否使用該變量。
若使用后期綁定,則每次調(diào)用屬性或方法時,Visual Basic 都要將成員名傳給該對象 IDispatch 接口的 GetIDsOfNames 方法。GetIDsOfNames 返回該成員的派遣 ID,或 DispID。Visual Basic 再將該 DispID 傳給 IDispatch 接口的 Invoke 方法來調(diào)用該成員。
對進程外部件而言,這意味著一次額外的跨進程方法調(diào)用,結(jié)果是調(diào)用開銷翻番。
前期綁定:如果在編譯時 Visual Basic 能夠知道屬性或方法所屬的對象,就可以預(yù)先查找該成員在類型庫中的 DispID 或 vtable 地址。這樣就無須在運行時調(diào)用 GetIDsOfNames。
當顯式聲明了變量的類時,例如 As Widget,該變量就只能存放該類的對象的引用。Visual Basic 就可以為該變量調(diào)用的所有屬性和方法使用前期綁定。
建議在 Visual Basic 和應(yīng)用程序中使用這種方法來聲明對象變量。
使用前期綁定還是后期綁定完全取決于聲明變量的方式。對象的創(chuàng)建方式對此沒有任何影響。
2. 后期綁定的幾個優(yōu)勢和好處
第一,個人認為,由于VB6不支持實現(xiàn)繼承,對于某些設(shè)計,可以使用將對象定義為Variant變量,而獲取某些設(shè)計和編碼上的便利,而得到接口或抽象類的好處。例如:
如定義2個類:
Class1:
1Option Explicit
2
3Public Sub Update()
4 MsgBox "Class1 Updated"
5End Sub
Class2:
1Option Explicit
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |