[TD]使用 Visual Basic .NET 重載事件處理程序 Matthew A. Stoecker Visual Studio Team Microsoft Corporation 2002 年 2 月
概要:本文介紹在 Visual Basic® .NET 中編程時(shí),如何重載事件處理程序。同時(shí)還討論如何使用 Handles 子句。 目錄- 簡(jiǎn)介
- 前提
- 繼承的事件處理程序
- 組件中繼承的事件處理程序
- 總結(jié)
簡(jiǎn)介 在繼承控件或組件時(shí),將創(chuàng)建封裝基類的所有功能的新控件或新組件。基類定義的所有事件處理程序都包含在繼承的組件中。本文將分析與繼承的事件處理程序相關(guān)的問(wèn)題,并具體討論如何使用 Visual Basic .NET 開(kāi)發(fā)應(yīng)用程序。前提- 您應(yīng)該非常了解繼承和面向?qū)ο蟮木幊獭S嘘P(guān)詳細(xì)信息,請(qǐng)參閱 Polymorphism in Components(英文)。
繼承的事件處理程序 在繼承某個(gè)組件時(shí),該組件的所有成員都被并入新類中。事件處理程序是在響應(yīng)組件接收的特定事件時(shí)執(zhí)行的方法,并且它是和其他組件成員一同被繼承的。以下示例顯示了一個(gè)典型的事件處理程序: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 (" 此按鈕已被單擊 " & _Counter.ToString() & " 次。")End Sub 只要發(fā)生 Button1.Click 事件,就會(huì)執(zhí)行以上方法。方法聲明末尾的 Handles 子句將方法與事件進(jìn)行關(guān)聯(lián)。這是組件中事件處理程序的典型結(jié)構(gòu)。 為了在繼承類中重載此方法,必須添加 Overridable 關(guān)鍵字,并將訪問(wèn)級(jí)別更改為 Protected、Protected Friend 或 Public。以下示例顯示了一個(gè)可以被重載的事件處理程序: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 (" 此按鈕已被單擊 " & _Counter.ToString() & " 次。")End Sub 組件中繼承的事件處理程序 重載繼承的事件處理程序與重載任何其他類型的繼承方法基本相同,唯一不同之處在于:在重載繼承的事件處理程序時(shí),必須刪除 Handles 子句。 重載繼承組件中的方法 - 將 Overrides 關(guān)鍵字添加到方法聲明中。
注意:不要在方法中添加 Handles 子句。事件處理程序已經(jīng)與基類中的事件相關(guān)聯(lián),并且此關(guān)聯(lián)將傳遞到繼承類中。也就是說(shuō),當(dāng)引發(fā)事件時(shí)將執(zhí)行此方法,而不再需要額外的 Handles 子句。
以下示例顯示了如何重載前面示例中的事件處理程序:Protected Overrides Sub Button1_Click(ByVal sender As System.Object, _ ByVal e as System.EventArgs) Static Counter as Integer = 0 Counter += 1 MessageBox.Show (" 此繼承的按鈕已被單擊 " & _Counter.ToString() & " 次。")End Sub 為什么不需要 Handles 子句 Handles 子句不再與此方法相關(guān)聯(lián)。這并不是疏忽,而是 .NET 框架處理事件的一項(xiàng)重要內(nèi)容。事件處理程序已經(jīng)與基類中的事件相關(guān)聯(lián),并且此關(guān)聯(lián)將傳遞到繼承類中。也就是說(shuō),當(dāng)引發(fā)事件時(shí)將執(zhí)行此方法,而不再需要額外的 Handles 子句。如下所示,如果添加 Handles 子句,將創(chuàng)建與事件的附加關(guān)聯(lián),這會(huì)使方法在每個(gè)事件中被執(zhí)行兩次。' 不正確的代碼Protected Overrides Sub Button1_Click(ByVal sender As System.Object, _ ByVal e as System.EventArgs) Handles Button1.Click Static Counter as Integer = 0 ' 每次單擊按鈕時(shí),此變量將遞增 ' 兩次。 Counter += 1 ' 每次單擊按鈕時(shí),消息框?qū)@示 ' 兩次,并顯示不準(zhǔn)確的信息。 MessageBox.Show (" 此繼承的按鈕已被單擊 " & _Counter.ToString() & " 次。")End Sub 總結(jié) 重載事件處理程序可能造成一些不易察覺(jué)的問(wèn)題,并導(dǎo)致難以查出的錯(cuò)誤。因此,設(shè)置與事件處理程序的正確關(guān)聯(lián)是非常重要的。請(qǐng)小心使用,并注意 |
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!