使用 Visual Basic .NET 重載事件處理程序(微軟)
2024-07-10 13:04:31
供稿:網友
 
使用 visual basic .net 重載事件處理程序 
matthew a. stoecker
visual studio team
microsoft corporation 
2002 年 2 月
概要:本文介紹在 visual basic® .net 中編程時,如何重載事件處理程序。同時還討論如何使用 handles 子句。 
目錄
簡介 
前提 
繼承的事件處理程序 
組件中繼承的事件處理程序 
總結 
簡介
在繼承控件或組件時,將創建封裝基類的所有功能的新控件或新組件。基類定義的所有事件處理程序都包含在繼承的組件中。本文將分析與繼承的事件處理程序相關的問題,并具體討論如何使用 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 (" 此按鈕已被單擊 " & _
      counter.tostring() & " 次。")
end sub
只要發生 button1.click 事件,就會執行以上方法。方法聲明末尾的 handles 子句將方法與事件進行關聯。這是組件中事件處理程序的典型結構。
為了在繼承類中重載此方法,必須添加 overridable 關鍵字,并將訪問級別更改為 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
組件中繼承的事件處理程序
重載繼承的事件處理程序與重載任何其他類型的繼承方法基本相同,唯一不同之處在于:在重載繼承的事件處理程序時,必須刪除 handles 子句。
重載繼承組件中的方法 
將 overrides 關鍵字添加到方法聲明中。
注意:不要在方法中添加 handles 子句。事件處理程序已經與基類中的事件相關聯,并且此關聯將傳遞到繼承類中。也就是說,當引發事件時將執行此方法,而不再需要額外的 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 子句不再與此方法相關聯。這并不是疏忽,而是 .net 框架處理事件的一項重要內容。事件處理程序已經與基類中的事件相關聯,并且此關聯將傳遞到繼承類中。也就是說,當引發事件時將執行此方法,而不再需要額外的 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
   ' 每次單擊按鈕時,此變量將遞增
   ' 兩次。
   counter += 1
   ' 每次單擊按鈕時,消息框將顯示
   ' 兩次,并顯示不準確的信息。
   messagebox.show (" 此繼承的按鈕已被單擊 " & _
      counter.tostring() & " 次。")
end sub
總結
重載事件處理程序可能造成一些不易察覺的問題,并導致難以查出的錯誤。因此,設置與事件處理程序的正確關聯是非常重要的。請小心使用,并注意已經存在的事件關聯。
網站運營seo文章大全提供全面的站長運營經驗及seo技術!