偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

VB.NET下的事件和委托

開(kāi)發(fā) 后端
本文依然給大家介紹事件和委托,只不過(guò)這次介紹的是VB.NET中的事件和委托。希望對(duì)大家有幫助,一起來(lái)看。

委托是可用于調(diào)用其他對(duì)象方法的對(duì)象。它們有時(shí)被稱為類型安全函數(shù)指針,因?yàn)樗鼈兣c其他編程語(yǔ)言中所使用的函數(shù)指針相似。但不同于函數(shù)指針,VB.NET 委托是基于 System.Delegate 類的引用類型,它可以引用共享方法—無(wú)需特定的類實(shí)例即可調(diào)用的方法和實(shí)例方法。

委托在調(diào)用過(guò)程和被調(diào)用過(guò)程需要媒介的情況下是很有用的。例如,您可能想讓一個(gè)引發(fā)事件的對(duì)象能夠在不同的環(huán)境下調(diào)用不同的事件處理程序。不幸的是,引發(fā)事件的對(duì)象無(wú)法提前知道處理特定事件的事件處理程序。Visual Basic .NET 通過(guò)在使用 AddHandler 語(yǔ)句時(shí)創(chuàng)建委托,可讓您動(dòng)態(tài)地將事件處理程序與事件關(guān)聯(lián)。在運(yùn)行時(shí),委托將各種調(diào)用轉(zhuǎn)發(fā)到相應(yīng)的事件處理程序。

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

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

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

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

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

處理來(lái)自基類的事件

通過(guò)給事件處理程序過(guò)程的聲明行添加 Handles MyBase.<event name> 語(yǔ)句來(lái)聲明派生類中的事件處理程序,其中的 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 

聲明使用現(xiàn)有委托類型的事件

某些情況下,可能會(huì)要聲明某事件使用現(xiàn)有委托類型為基礎(chǔ)委托。以下語(yǔ)法說(shuō)明了進(jìn)行聲明的方式:

Event AnEvent As DelegateType該語(yǔ)法在將多個(gè)事件路由到同一處理程序時(shí)是很有用的,不過(guò)使用現(xiàn)有委托類型時(shí)需要先進(jìn)行如下定義:

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

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

比如說(shuō)在社會(huì)上,你是法律,社會(huì)上有三種人,警察、無(wú)賴和自愿反扒隊(duì)。

你規(guī)定:如果小偷偷東西,則警察處罰小偷500元錢(qián),自愿反扒隊(duì)要打無(wú)賴進(jìn)醫(yī)院一次

這就是現(xiàn)實(shí)中的委托。

實(shí)際上,在寫(xiě)程序中,程序員就是法律,警察、小偷和自愿反扒隊(duì)就是三個(gè)對(duì)象。小偷偷東西是一個(gè)方法,小偷還有一個(gè)偷東西事件,他偷東西激發(fā)這個(gè)事件。而警察和自愿反扒隊(duì)就是兩個(gè)事件處理對(duì)象,警察負(fù)責(zé)把小偷的錢(qián)扣除500,自愿反扒隊(duì)需要大小偷進(jìn)醫(yī)院一次。

所以,委托有如下幾個(gè)要素:

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

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

下面是vb.net控制臺(tái)的實(shí)例

  1. Imports System  
  2. Module Module1  
  3.  
  4. '準(zhǔn)備引用 無(wú)賴 類的偷東西事件  
  5. Public WithEvents w As 無(wú)賴  
  6. Sub Main()  
  7. Console.WriteLine("新的一天開(kāi)始了....")  
  8. ' 實(shí)例華警察、無(wú)賴、自愿反扒隊(duì) 類  
  9. Dim p As New 警察  
  10. w = New 無(wú)賴  
  11. Dim pp As New 自愿反扒隊(duì)  
  12. '設(shè)置對(duì)無(wú)賴類的偷東西事件的監(jiān)視,并設(shè)置相應(yīng)的事件處理程序  
  13. '如果小偷玩偷東西則引用警察的罰錢(qián)處理程序  
  14. AddHandler w.PlayGame, AddressOf p.扣錢(qián)  
  15. '如果小偷偷東西則引用自愿反扒隊(duì)的打人處理程序  
  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. '定義的事件處理程序的參數(shù)類型要與定義的委托的參數(shù)類型相一致  
  28. Public Sub 扣錢(qián)(ByVal sender As ObjectByVal e As System.EventArgs)  
  29.  
  30. Console.WriteLine("警察:好小子,膽敢偷東西...")  
  31. '定義線程輸出遲緩3秒  
  32. System.Threading.Thread.Sleep(3000)  
  33. Console.WriteLine("警察:看看你小子有多少錢(qián)...")  
  34. Dim f As 無(wú)賴 = sender  
  35. System.Threading.Thread.Sleep(3000)  
  36. Console.WriteLine("無(wú)賴 的錢(qián): " + f.錢(qián).ToString())  
  37. System.Threading.Thread.Sleep(3000)  
  38. Console.WriteLine("開(kāi)始扣錢(qián)......")  
  39. System.Threading.Thread.Sleep(3000)  
  40. f.錢(qián) = f.錢(qián) - 500  
  41. Console.WriteLine("扣完了....現(xiàn)在無(wú)賴 還剩下:" + f.錢(qián).ToString())  
  42. System.Threading.Thread.Sleep(3000)  
  43. End Sub 
  44.  
  45. End Class 
  46. Public Class 無(wú)賴  
  47. '先定義一個(gè)偷東西的事件使用現(xiàn)有委托類型 PlayGameHandler為基礎(chǔ)委托  
  48. Public Event PlayGame As PlayGameHandler  
  49. Private m_Money As Integer 
  50. Private ey As Integer 
  51. Sub New()  
  52. Console.WriteLine("生成無(wú)賴....")  
  53. m_Money = 1000  
  54. ey = 5  
  55. End Sub 
  56. '定義挨打?qū)傩杂脕?lái)記錄挨打過(guò)幾次  
  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. '定義前屬性用來(lái)記錄有多少錢(qián)  
  66. Property 錢(qián)() 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. '定義偷東西過(guò)程  
  75. Public Sub 偷東西()  
  76. Console.WriteLine("無(wú)賴開(kāi)始偷東西了")  
  77. System.Threading.Thread.Sleep(3000)  
  78. '實(shí)例化事件參數(shù)  
  79. Dim e As New System.EventArgs  
  80. '引發(fā)偷東西事件,參數(shù)類型要與現(xiàn)有委托類型一致  
  81. RaiseEvent PlayGame(Me, e)  
  82. End Sub 
  83. End Class 
  84. Public Class 自愿反扒隊(duì)  
  85. Sub New()  
  86. Console.WriteLine("自愿反扒隊(duì)來(lái)了.....")  
  87. System.Threading.Thread.Sleep(3000)  
  88. End Sub 
  89. '定義的事件處理程序的參數(shù)類型要與定義的委托的參數(shù)類型相一致  
  90. Public Sub 打人(ByVal sender As ObjectByVal e As System.EventArgs)  
  91. System.Threading.Thread.Sleep(3000)  
  92. Console.WriteLine("自愿反扒隊(duì):好小子,敢偷東西...")  
  93. System.Threading.Thread.Sleep(3000)  
  94. Console.WriteLine("自愿反扒隊(duì):你小子挨過(guò)幾次打了...")  
  95. Dim bn As 無(wú)賴 = sender  
  96. System.Threading.Thread.Sleep(3000)  
  97. Console.WriteLine("無(wú)賴:" + bn.挨打.ToString + "次")  
  98. System.Threading.Thread.Sleep(3000)  
  99.  
  100. Console.WriteLine("自愿反扒隊(duì):那也得揍你,先來(lái)一拳.... ")  
  101. System.Threading.Thread.Sleep(3000)  
  102. Console.WriteLine("自愿反扒隊(duì):再來(lái)一腳......")  
  103. System.Threading.Thread.Sleep(3000)  
  104.  
  105. Console.WriteLine("自愿反扒隊(duì):打完了...趕緊去醫(yī)院吧...")  
  106. End Sub 
  107. End Class 
  108. '定義委托類型  
  109. Delegate Sub PlayGameHandler(ByVal sender As ObjectByVal e As System.EventArgs)  
  110. End Module 

進(jìn)一步閱讀:談JavaScript中的事件委托

【編輯推薦】

  1. VB.NET和ASP.NET編碼規(guī)范
  2. VB.NET實(shí)現(xiàn)圖象文件和XML文件互換
  3. .NET程序員是否應(yīng)該放棄VB.NET?
  4. 盤(pán)點(diǎn)VB.NET對(duì)話框制作技巧
  5. 詳解VB.NET與GDI結(jié)合實(shí)現(xiàn)步驟
責(zé)任編輯:于鐵 來(lái)源: CSDN博客
相關(guān)推薦

2009-10-23 17:03:18

VB.NET事件編程

2010-01-12 18:12:58

VB.NET事件

2009-10-29 14:02:24

VB和VB.NET比較

2009-11-11 13:24:29

VB.NET事件

2009-11-04 09:32:12

VB.NET Auto

2009-11-02 17:12:01

VB和VB.NET

2010-01-11 10:08:47

VB.NET事件通道

2010-01-22 17:22:49

VB.NET事件訪問(wèn)器

2009-11-03 11:06:40

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開(kāi)發(fā)

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-08 18:02:33

VB.NET事件

2011-06-17 11:05:22

VB.NET

2009-06-24 15:45:32

VB.NET
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)