• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    對VB6的后期綁定和前期綁定的一點看法

    發布: 2007-5-25 09:19 | 作者: 馬維峰 | 來源: 博客堂 | 查看: 31次 | 進入軟件測試論壇討論

    領測軟件測試網  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
    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

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>