VB.NET重載事件處理應(yīng)用經(jīng)驗(yàn)分享
VB.NET是由微軟開發(fā)的一款面向?qū)ο笳Z言。其應(yīng)用范圍也是比較廣泛。其中一個比較重要的操作就是重載。我們可以利用VB.NET重載事件處理實(shí)現(xiàn)許多特定功能,幫助我們提高實(shí)際開發(fā)效率。
前提
您應(yīng)該非常了解繼承和面向?qū)ο蟮木幊?。有關(guān)詳細(xì)信息,請參閱 Polymorphism in Components(英文)。
繼承的VB.NET重載事件處理程序
在繼承某個組件時,該組件的所有成員都被并入新類中。事件處理程序是在響應(yīng)組件接收的特定事件時執(zhí)行的方法,并且它是和其他組件成員一同被繼承的。以下示例顯示了一個典型的事件處理程序:
- 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 事件,就會執(zhí)行以上方法。方法聲明末尾的 Handles 子句將方法與事件進(jìn)行關(guān)聯(lián)。這是組件中事件處理程序的典型結(jié)構(gòu)。
為了在繼承類中重載此方法,必須添加 Overridable 關(guān)鍵字,并將訪問級別更改為 Protected、Protected Friend 或 Public。以下示例顯示了一個可以被重載的事件處理程序:
- 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
組件中繼承的VB.NET重載事件處理程序#t#
重載繼承的事件處理程序與重載任何其他類型的繼承方法基本相同,***不同之處在于:在重載繼承的事件處理程序時,必須刪除 Handles 子句。
重載繼承組件中的方法
將 Overrides 關(guān)鍵字添加到方法聲明中。
注意:不要在方法中添加 Handles 子句。VB.NET重載事件處理程序已經(jīng)與基類中的事件相關(guān)聯(lián),并且此關(guān)聯(lián)將傳遞到繼承類中。也就是說,當(dāng)引發(fā)事件時將執(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)容。VB.NET重載事件處理程序已經(jīng)與基類中的事件相關(guān)聯(lián),并且此關(guān)聯(lián)將傳遞到繼承類中。也就是說,當(dāng)引發(fā)事件時將執(zhí)行此方法,而不再需要額外的 Handles 子句。如下所示,如果添加 Handles 子句,將創(chuàng)建與事件的附加關(guān)聯(lián),這會使方法在每個事件中被執(zhí)行兩次。
- ' 不正確的代碼
- Protected Overrides Sub
Button1_Click(ByVal sender
As System.Object, _- ByVal e as System.EventArgs)
Handles Button1.Click- Static Counter as Integer = 0
- ' 每次單擊按鈕時,此變量將遞增
- ' 兩次。
- Counter += 1
- ' 每次單擊按鈕時,消息框?qū)@示
- ' 兩次,并顯示不準(zhǔn)確的信息。
- MessageBox.Show ("
此繼承的按鈕已被單擊 " & _- Counter.ToString() & " 次。")
- End Sub
總結(jié)
VB.NET重載事件處理程序可能造成一些不易察覺的問題,并導(dǎo)致難以查出的錯誤。因此,設(shè)置與事件處理程序的正確關(guān)聯(lián)是非常重要的。請小心使用,并注意已經(jīng)存在的事件關(guān)聯(lián)。