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

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

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

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

    Visual Basic .NET的Override事件處理程序

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 13次 | 進入軟件測試論壇討論

    領測軟件測試網 王凌峰 編譯

    介紹 在類或控件的繼承中,子類或子控件封裝了父類的所有函數,其中包括事件處理程序。 本文將著重討論在 Visual Basic .NET 應用程序設計中如何正確對待事件處理程序的繼承。

    讀者要求 本文假定讀者熟悉面向對象程序設計和類的繼承性。若您尚未熟悉它們,請參閱《組件 的多態性》 ("Polymorphism in Components")。

    繼承事件處理程序 當組件被繼承時,它的所有成員都被封裝到子類中。事件處理程序是響應特定事件的方 法,是組件成員之一,因而也被繼承。請看一個典型的事件處理程序:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e as _ System.EventArgs) Handles Button1.Click Static Counter as Integer = 0 Counter += 1 MessageBox.Show (" This button has been clicked " & _ Counter.ToString() & " times.") End Sub

    我們看到,宣告部分末尾的 Handles 子句把處理程序關聯到特定的事件上。具體而言, 上述代碼將在 Button1.Click 事件發生時運行。這就是用于定義事件處理程序的典型語法。

    為了實現 override ,你必須使用 Overridable 關鍵字,并且重新定義其可見性為 Protected 、 Protected Friend 或者 Public 。下面示范如何 override 事件處理程式:

    Protected Overridable Sub Button1_Click(ByVal sender As System.Object, _ ByVal e as System.EventArgs) Handles Button1.Click Static Counter as Integer = 0 Counter += 1 MessageBox.Show (" This button has been clicked " & _ Counter.ToString() & " times.") End Sub

    在組件中繼承事件處理程序

    事件處理程序的 override 固然與其它方法的 override 大同小異,有一點卻不得不提:在 override 事件處理程序時必須除去 Handles 子句。

    如何 override 組件的事件處理程序

    1) 在事件處理程序的宣告部分加入 Overrides 關鍵字

    請注意:不要附加 Handles 子句。因為父類的處理程序已經關聯了特定事件,子類將繼 承這一切。換句話說,父類所關聯的事件可以激活子類的處理程序,因而這里的 Handles 子 句是多余的。 下面示范如何 override 前述事件處理程序:

    Protected Overrides Sub Button1_Click(ByVal sender As System.Object, _ ByVal e as System.EventArgs) Static Counter as Integer = 0 Counter += 1 MessageBox.Show (" This inherited button has been clicked " & _ Counter.ToString() & " times.") End Sub

    2) 為什么不需要 Handles 子句

    前面提到,我們沒有使用關聯事件的 Handles 子句并不是一個疏漏,而是由 .NET 框架 的事件處理機制所決定的。父類中的 Handles 子句將事件處理程序關聯到特定事件上,這種 關聯將被子類繼承。因此,即令子類中沒有 Handles 子句,父類所關聯的事件也能激活子類 的事件處理程序。倘若此時加上 Handles 子句,則處理程序將被再次關聯到事件上。重復關 聯的后果是處理程序將被連續激活兩次。例如:

    注釋: 錯誤的代碼 Protected Overrides Sub Button1_Click(ByVal sender As System.Object, _ ByVal e as System.EventArgs) Handles Button1.Click Static Counter as Integer = 0 注釋: 本例中使用了 Handles 子句, 注釋: 因而每當按鈕 Button1 被點擊一次, 注釋: 變量 Counter 將會增加兩次 ; Counter += 1 注釋: 消息框也會彈出兩次, 注釋: 顯示的內容也將違背設計意圖 MessageBox.Show (" This inherited button has been clicked " & _ Counter.ToString() & " times.") End Sub

    結論 在 Visual Basic .NET 中,事件處理程序的 override 可能造成難以偵錯的 bug 。例如在使 用 Handles 子句關聯事件處理程序時就要格外小心,以免發生重復關聯。

    延伸閱讀

    文章來源于領測軟件測試網 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>