成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

VB.NET下的事件和委托

開發 后端
本文依然給大家介紹事件和委托,只不過這次介紹的是VB.NET中的事件和委托。希望對大家有幫助,一起來看。

委托是可用于調用其他對象方法的對象。它們有時被稱為類型安全函數指針,因為它們與其他編程語言中所使用的函數指針相似。但不同于函數指針,VB.NET 委托是基于 System.Delegate 類的引用類型,它可以引用共享方法—無需特定的類實例即可調用的方法和實例方法。

委托在調用過程和被調用過程需要媒介的情況下是很有用的。例如,您可能想讓一個引發事件的對象能夠在不同的環境下調用不同的事件處理程序。不幸的是,引發事件的對象無法提前知道處理特定事件的事件處理程序。Visual Basic .NET 通過在使用 AddHandler 語句時創建委托,可讓您動態地將事件處理程序與事件關聯。在運行時,委托將各種調用轉發到相應的事件處理程序。

盡管可以創建自己的委托,但在大多數情況下,Visual Basic .NET 為您創建委托并提供具體信息。例如,Event 語句將名為 <EventName>EventHandler 的委托類隱式定義為 Event 語句所在類的嵌套類,且其簽字與該事件相同。AddressOf 語句則隱式創建委托的實例。例如,以下兩行代碼是等效的:

  1. AddHandler Button1.Click    
  2. AddressOf Me.Button1_Click   
  3. ' AddHandler 指向引發事件的對象,AddressOf則確定該事件對象所要調用的事件處理程序  
  4. '上述行為又可以稱為 監視  
  5. AddHandler Button1.Click, New EventHandler(AddressOf Button1_Click)  

只要編譯器可以用上下文確定委托的類型,就可以使用速寫方法創建委托。

注:處理自基類繼承的事件

派生類(繼承某個基類特征的類)能用 Handles MyBase 語句處理它們的基類所引發的事件。

處理來自基類的事件

通過給事件處理程序過程的聲明行添加 Handles MyBase.<event name> 語句來聲明派生類中的事件處理程序,其中的 event name 是基類中正在處理的事件的名稱。例如:

  1. Public Class Class1  
  2. Public Event SE(ByVal i As Integer)  
  3. ' Place methods and properties here.  
  4. End Class 
  5.  
  6. Public Class Class2  
  7. Inherits Class1  
  8. Sub EventHandler(ByVal x As IntegerHandles MyBase.SE  
  9. ' Place code to handle events from Class1 here.  
  10. End Sub 
  11. End Class 

聲明使用現有委托類型的事件

某些情況下,可能會要聲明某事件使用現有委托類型為基礎委托。以下語法說明了進行聲明的方式:

Event AnEvent As DelegateType該語法在將多個事件路由到同一處理程序時是很有用的,不過使用現有委托類型時需要先進行如下定義:

  1. delegate {sub|function} DelegateType(參數1,參數2) 

下面是vb.net控制臺程序演示單一事件委托多處理程序.

比如說在社會上,你是法律,社會上有三種人,警察、無賴和自愿反扒隊。

你規定:如果小偷偷東西,則警察處罰小偷500元錢,自愿反扒隊要打無賴進醫院一次

這就是現實中的委托。

實際上,在寫程序中,程序員就是法律,警察、小偷和自愿反扒隊就是三個對象。小偷偷東西是一個方法,小偷還有一個偷東西事件,他偷東西激發這個事件。而警察和自愿反扒隊就是兩個事件處理對象,警察負責把小偷的錢扣除500,自愿反扒隊需要大小偷進醫院一次。

所以,委托有如下幾個要素:

  • 激發事件的對象--就是小偷
  • 處理對象事件的對象--就是警察和自愿反扒隊
  • 定義委托,就是法律讓警察和自愿反扒隊監視小偷。

如果這三個要素都滿足的話,則你就寫出了一個完整事件的處理。

下面是vb.net控制臺的實例

  1. Imports System  
  2. Module Module1  
  3.  
  4. '準備引用 無賴 類的偷東西事件  
  5. Public WithEvents w As 無賴  
  6. Sub Main()  
  7. Console.WriteLine("新的一天開始了....")  
  8. ' 實例華警察、無賴、自愿反扒隊 類  
  9. Dim p As New 警察  
  10. w = New 無賴  
  11. Dim pp As New 自愿反扒隊  
  12. '設置對無賴類的偷東西事件的監視,并設置相應的事件處理程序  
  13. '如果小偷玩偷東西則引用警察的罰錢處理程序  
  14. AddHandler w.PlayGame, AddressOf p.扣錢  
  15. '如果小偷偷東西則引用自愿反扒隊的打人處理程序  
  16. AddHandler w.PlayGame, AddressOf pp.打人  
  17. w.偷東西()  
  18. Console.WriteLine("天黑了....")  
  19. Console.ReadLine()  
  20. End Sub 
  21. 'End Class  
  22.  
  23. Public Class 警察  
  24. Sub New()  
  25. Console.WriteLine("生成警察......")  
  26. End Sub 
  27. '定義的事件處理程序的參數類型要與定義的委托的參數類型相一致  
  28. Public Sub 扣錢(ByVal sender As ObjectByVal e As System.EventArgs)  
  29.  
  30. Console.WriteLine("警察:好小子,膽敢偷東西...")  
  31. '定義線程輸出遲緩3秒  
  32. System.Threading.Thread.Sleep(3000)  
  33. Console.WriteLine("警察:看看你小子有多少錢...")  
  34. Dim f As 無賴 = sender  
  35. System.Threading.Thread.Sleep(3000)  
  36. Console.WriteLine("無賴 的錢: " + f.錢.ToString())  
  37. System.Threading.Thread.Sleep(3000)  
  38. Console.WriteLine("開始扣錢......")  
  39. System.Threading.Thread.Sleep(3000)  
  40. f.錢 = f.錢 - 500  
  41. Console.WriteLine("扣完了....現在無賴 還剩下:" + f.錢.ToString())  
  42. System.Threading.Thread.Sleep(3000)  
  43. End Sub 
  44.  
  45. End Class 
  46. Public Class 無賴  
  47. '先定義一個偷東西的事件使用現有委托類型 PlayGameHandler為基礎委托  
  48. Public Event PlayGame As PlayGameHandler  
  49. Private m_Money As Integer 
  50. Private ey As Integer 
  51. Sub New()  
  52. Console.WriteLine("生成無賴....")  
  53. m_Money = 1000  
  54. ey = 5  
  55. End Sub 
  56. '定義挨打屬性用來記錄挨打過幾次  
  57. Property 挨打() As Integer 
  58. Get 
  59. Return ey  
  60. End Get 
  61. Set(ByVal Value As Integer)  
  62. ey = Value  
  63. End Set 
  64. End Property 
  65. '定義前屬性用來記錄有多少錢  
  66. Property 錢() As Integer 
  67. Get 
  68. Return m_Money  
  69. End Get 
  70. Set(ByVal Value As Integer)  
  71. m_Money = Value  
  72. End Set 
  73. End Property 
  74. '定義偷東西過程  
  75. Public Sub 偷東西()  
  76. Console.WriteLine("無賴開始偷東西了")  
  77. System.Threading.Thread.Sleep(3000)  
  78. '實例化事件參數  
  79. Dim e As New System.EventArgs  
  80. '引發偷東西事件,參數類型要與現有委托類型一致  
  81. RaiseEvent PlayGame(Me, e)  
  82. End Sub 
  83. End Class 
  84. Public Class 自愿反扒隊  
  85. Sub New()  
  86. Console.WriteLine("自愿反扒隊來了.....")  
  87. System.Threading.Thread.Sleep(3000)  
  88. End Sub 
  89. '定義的事件處理程序的參數類型要與定義的委托的參數類型相一致  
  90. Public Sub 打人(ByVal sender As ObjectByVal e As System.EventArgs)  
  91. System.Threading.Thread.Sleep(3000)  
  92. Console.WriteLine("自愿反扒隊:好小子,敢偷東西...")  
  93. System.Threading.Thread.Sleep(3000)  
  94. Console.WriteLine("自愿反扒隊:你小子挨過幾次打了...")  
  95. Dim bn As 無賴 = sender  
  96. System.Threading.Thread.Sleep(3000)  
  97. Console.WriteLine("無賴:" + bn.挨打.ToString + "次")  
  98. System.Threading.Thread.Sleep(3000)  
  99.  
  100. Console.WriteLine("自愿反扒隊:那也得揍你,先來一拳.... ")  
  101. System.Threading.Thread.Sleep(3000)  
  102. Console.WriteLine("自愿反扒隊:再來一腳......")  
  103. System.Threading.Thread.Sleep(3000)  
  104.  
  105. Console.WriteLine("自愿反扒隊:打完了...趕緊去醫院吧...")  
  106. End Sub 
  107. End Class 
  108. '定義委托類型  
  109. Delegate Sub PlayGameHandler(ByVal sender As ObjectByVal e As System.EventArgs)  
  110. End Module 

進一步閱讀:談JavaScript中的事件委托

【編輯推薦】

  1. VB.NET和ASP.NET編碼規范
  2. VB.NET實現圖象文件和XML文件互換
  3. .NET程序員是否應該放棄VB.NET?
  4. 盤點VB.NET對話框制作技巧
  5. 詳解VB.NET與GDI結合實現步驟
責任編輯:于鐵 來源: CSDN博客
相關推薦

2009-10-23 17:03:18

VB.NET事件編程

2010-01-12 18:12:58

VB.NET事件

2009-11-11 13:24:29

VB.NET事件

2009-11-04 09:32:12

VB.NET Auto

2009-10-29 14:02:24

VB和VB.NET比較

2010-01-11 10:08:47

VB.NET事件通道

2010-01-22 17:22:49

VB.NET事件訪問器

2009-11-03 11:06:40

VB.NET事件

2009-11-02 17:12:01

VB和VB.NET

2009-10-27 11:39:03

VB.NET事件處理程

2009-10-10 17:06:09

VB和VB.NET

2009-10-23 17:22:48

VB.NET編程

2009-10-14 14:50:16

VB6.0VB.NET

2009-10-09 16:00:34

VB6.0開發

2010-01-08 18:02:33

VB.NET事件

2011-05-19 09:20:21

VB.NETASP.NET

2009-10-20 14:21:55

VB.NET fnSi

2009-10-14 12:51:41

VB.NET Data

2010-01-07 11:38:25

VB.NET鍵盤事件

2011-06-17 11:05:22

VB.NET
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲最大的黄色网址 | 国产福利在线 | 国产一区二区精品在线 | 国产日韩精品在线 | 久久精品国产亚洲一区二区 | 欧美美女爱爱视频 | 国产亚洲一区二区三区 | 亚洲精品一区二区在线观看 | 国产精品视频一二三区 | 欧美一区二区在线播放 | 中文字幕不卡在线88 | 成人在线免费视频 | 综合激情久久 | 日韩高清成人 | 亚洲一区二区视频 | 992人人草| 色综合一区二区三区 | 日韩精品人成在线播放 | 免费成人在线网 | 99精品欧美一区二区蜜桃免费 | 国产日韩中文字幕 | 久久最新精品视频 | 色欧美片视频在线观看 | 午夜大片 | av色站| 久久免费精品 | 久久精品99 | 日日淫 | 欧美理伦片在线播放 | 国产午夜精品一区二区三区在线观看 | 鲁视频| 久久九九色 | 日韩精品免费一区 | 日韩中文一区二区三区 | 日本精品一区二区三区视频 | 91精品无人区卡一卡二卡三 | 精品日韩一区 | 欧美福利在线 | 毛片一级片 | 在线观看国产精品一区二区 | 亚洲免费观看 |