日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
VB.NETOverride處理方式解讀

在學(xué)習(xí)了VB.NET這門編程語言后,大家會(huì)慢慢的發(fā)現(xiàn)這門語言中隱藏的知識是很廣的,有很多功能值得我們?nèi)ド钊氲难芯?。比如VB.NET Override就是其中一個(gè)比較難掌握的知識點(diǎn)。在類或控件的繼承中,子類或子控件封裝了父類的所有函數(shù),其中包括事件處理程序。本文將著重討論事件處理程序的VB.NET Override實(shí)現(xiàn)方法。

創(chuàng)新互聯(lián)是一家專業(yè)提供平果企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站制作、網(wǎng)站建設(shè)、HTML5、小程序制作等業(yè)務(wù)。10年已為平果眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

繼承事件處理程序

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

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

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

為了實(shí)現(xiàn)VB.NET Override,你必須使用 Overridable 關(guān)鍵字,并且重新定義其可見性為 Protected 、 Protected Friend 或者 Public 。下面示范如何 override 事件處理程式:

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

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

事件處理程序的VB.NET Override固然與其它方法的 override 大同小異,有一點(diǎn)卻不得不提:在 override 事件處理程序時(shí)必須除去 Handles 子句。

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

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

請注意:不要附加 Handles 子句。因?yàn)楦割惖奶幚沓绦蛞呀?jīng)關(guān)聯(lián)了特定事件,子類將繼承這一切。換句話說,父類所關(guān)聯(lián)的事件可以激活子類的處理程序,因而這里的 Handles 子句是多余的。

下面示范如何 override 前述事件處理程序:

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

2) 為什么不需要 Handles 子句

前面提到,我們沒有使用關(guān)聯(lián)事件的 Handles 子句并不是一個(gè)疏漏,而是由 .NET 框架的事件處理機(jī)制所決定的。父類中的 Handles 子句將事件處理程序關(guān)聯(lián)到特定事件上,這種關(guān)聯(lián)將被子類繼承。因此,即令子類中沒有 Handles 子句,父類所關(guān)聯(lián)的事件也能激活子類的事件處理程序。倘若此時(shí)加上 Handles 子句,則處理程序?qū)⒈辉俅侮P(guān)聯(lián)到事件上。重復(fù)關(guān)聯(lián)的后果是處理程序?qū)⒈贿B續(xù)激活兩次。例如:

 
 
 
  1. ' 錯(cuò)誤的代碼   
  2. Protected Overrides Sub 
    Button1_Click(ByVal sender As 
    System.Object, _   
  3. ByVal e as System.EventArgs) Handles
     Button1.Click   
  4. Static Counter as Integer = 0   
  5. ' 本例中使用了 Handles 子句,   
  6. ' 因而每當(dāng)按鈕 Button1 被點(diǎn)擊一次,   
  7. ' 變量 Counter 將會(huì)增加兩次 ;   
  8. Counter += 1   
  9. ' 消息框也會(huì)彈出兩次,   
  10. ' 顯示的內(nèi)容也將違背設(shè)計(jì)意圖   
  11. MessageBox.Show (" This inherited 
    button has been clicked " & _   
  12. Counter.ToString() & " times.")   
  13. End Sub  

結(jié)論

在 Visual Basic .NET 中,事件處理程序的VB.NET Override可能造成難以偵錯(cuò)的 bug 。例如在使用 Handles 子句關(guān)聯(lián)事件處理程序時(shí)就要格外小心,以免發(fā)生重復(fù)關(guān)聯(lián)。


網(wǎng)站標(biāo)題:VB.NETOverride處理方式解讀
文章轉(zhuǎn)載:http://www.dlmjj.cn/article/djchhij.html