VB.NET Override的處理方式是什么,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
創(chuàng)新互聯(lián)是一家專注于網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站與策劃設(shè)計(jì),磴口網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:磴口等地區(qū)。磴口做網(wǎng)站價(jià)格咨詢:028-86922220
在學(xué)習(xí)了VB.NET這門(mén)編程語(yǔ)言后,大家會(huì)慢慢的發(fā)現(xiàn)這門(mén)語(yǔ)言中隱藏的知識(shí)是很廣的,有很多功能值得我們?nèi)ド钊氲难芯俊1热鏥B.NET Override就是其中一個(gè)比較難掌握的知識(shí)點(diǎn)。在類或控件的繼承中,子類或子控件封裝了父類的所有函數(shù),其中包括事件處理程序。
繼承事件處理程序
當(dāng)組件被繼承時(shí),它的所有成員都被封裝到子類中。事件處理程序是響應(yīng)特定事件的方法,是組件成員之一,因而也被繼承。請(qǐng)看一個(gè)典型的事件處理程序:
Private Sub Button1_Click(ByVal
sender As System.Object,
ByVal e as _System.EventArgs) Handles
Button1.ClickStatic Counter as Integer = 0
Counter += 1
MessageBox.Show (" This button
has been clicked " & _Counter.ToString() & " times.")
End Sub
我們看到,宣告部分末尾的 Handles 子句把處理程序關(guān)聯(lián)到特定的事件上。具體而言,上述代碼將在 Button1.Click 事件發(fā)生時(shí)運(yùn)行。這就是用于定義事件處理程序的典型語(yǔ)法。
為了實(shí)現(xiàn)VB.NET Override,你必須使用 Overridable 關(guān)鍵字,并且重新定義其可見(jiàn)性為 Protected 、 Protected Friend 或者 Public 。下面示范如何 override 事件處理程式:
Protected Overridable Sub
Button1_Click(ByVal sender
As System.Object, _ByVal e as System.EventArgs)
Handles Button1.ClickStatic Counter as Integer = 0
Counter += 1
MessageBox.Show (" This button
has been clicked " & _Counter.ToString() & " times.")
End Sub
在組件中繼承事件處理程序
事件處理程序的VB.NET Override固然與其它方法的 override 大同小異,有一點(diǎn)卻不得不提:在 override 事件處理程序時(shí)必須除去 Handles 子句。
如何 override 組件的事件處理程序
1) 在事件處理程序的宣告部分加入 Overrides 關(guān)鍵字
請(qǐng)注意:不要附加 Handles 子句。因?yàn)楦割惖奶幚沓绦蛞呀?jīng)關(guān)聯(lián)了特定事件,子類將繼承這一切。換句話說(shuō),父類所關(guān)聯(lián)的事件可以激活子類的處理程序,因而這里的 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 子句
前面提到,我們沒(méi)有使用關(guān)聯(lián)事件的 Handles 子句并不是一個(gè)疏漏,而是由 .NET 框架的事件處理機(jī)制所決定的。父類中的 Handles 子句將事件處理程序關(guān)聯(lián)到特定事件上,這種關(guān)聯(lián)將被子類繼承。因此,即令子類中沒(méi)有 Handles 子句,父類所關(guān)聯(lián)的事件也能激活子類的事件處理程序。倘若此時(shí)加上 Handles 子句,則處理程序?qū)⒈辉俅侮P(guān)聯(lián)到事件上。重復(fù)關(guān)聯(lián)的后果是處理程序?qū)⒈贿B續(xù)激活兩次。例如:
' 錯(cuò)誤的代碼
Protected Overrides Sub
Button1_Click(ByVal sender As
System.Object, _ByVal e as System.EventArgs) Handles
Button1.ClickStatic Counter as Integer = 0
' 本例中使用了 Handles 子句,
' 因而每當(dāng)按鈕 Button1 被點(diǎn)擊一次,
' 變量 Counter 將會(huì)增加兩次 ;
Counter += 1
' 消息框也會(huì)彈出兩次,
' 顯示的內(nèi)容也將違背設(shè)計(jì)意圖
MessageBox.Show (" This inherited
button has been clicked " & _Counter.ToString() & " times.")
End Sub
結(jié)論
在 Visual Basic .NET 中,事件處理程序的VB.NET Override可能造成難以偵錯(cuò)的 bug 。例如在使用 Handles 子句關(guān)聯(lián)事件處理程序時(shí)就要格外小心,以免發(fā)生重復(fù)關(guān)聯(lián)。
看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。