快捷簡(jiǎn)單的VB.NET編程事件方法介紹
看一個(gè)關(guān)于VB.NET編程的例子,在這里呢我使用另一種方法來(lái)說(shuō)明當(dāng)你建立和注冊(cè)一個(gè)事件處理程序時(shí)到底發(fā)生了什么事情。一旦你明白事情是怎么回事,你也許會(huì)感激使用了更簡(jiǎn)潔的語(yǔ)法實(shí)現(xiàn)了相同的目標(biāo),一起來(lái)看看吧:
- '建立銀行帳號(hào)對(duì)象
- Dim account1 As New BankAccount()
- '注冊(cè)事件處理程序
- AddHandler account1.LargeWithdraw, AddressOf AccountHandlers.LogWithdraw
- AddHandler account1.LargeWithdraw, AddressOf AccountHandlers.GetApproval
因?yàn)锳ddHandler語(yǔ)句期待一個(gè)委托對(duì)象作為第二個(gè)參數(shù),你能使用速記語(yǔ)法--AddressOf操作符后緊跟目標(biāo)處理方法的名字。當(dāng)Visual Basic .NET編譯器看到該語(yǔ)法時(shí),它接著產(chǎn)生額外的代碼來(lái)建立作為事件處理程序服務(wù)的委托對(duì)象。VB.NET編程語(yǔ)言中的AddHandler語(yǔ)句的補(bǔ)充是RemoveHandler語(yǔ)句。RemoveHandler需要的參數(shù)與AddHandler的相同,它的效果相反。它通過(guò)事件源調(diào)用remove_LargeWithdraw方法從已注冊(cè)的處理方法列表中刪除目標(biāo)處理方法。
- Dim account1 As New BankAccount()
- '注冊(cè)事件處理程序
- AddHandler account1.LargeWithdraw, AddressOf AccountHandlers.LogWithdraw
- '刪除事件處理程序注冊(cè)
- RemoveHandler account1.LargeWithdraw, AddressOf AccountHandlers.LogWithdraw
你已經(jīng)看到了實(shí)現(xiàn)使用事件的回調(diào)設(shè)計(jì)需要的所有步驟了。代碼顯示了一個(gè)完整的應(yīng)用程序,在該程序中已經(jīng)注冊(cè)了兩個(gè)事件處理程序從BankAccount對(duì)象的LargeWithdraw事件接收回調(diào)通知。
- Delegate Sub LargeWithdrawHandler(ByVal Amount As Decimal)
- Class BankAccount
- Public Event LargeWithdraw As LargeWithdrawHandler
- Sub Withdraw(ByVal Amount As Decimal)
- '如果需要的話就發(fā)送通知
- If (Amount > 5000) Then
- RaiseEvent LargeWithdraw(Amount)
- End If
- '執(zhí)行撤消
- End Sub
- End Class
- Class AccountHandlers
- Shared Sub LogWithdraw(ByVal Amount As Decimal)
- '把撤消信息寫入日志文件
- End Sub
- Shared Sub GetApproval(ByVal Amount As Decimal)
- '阻塞直到管理者批準(zhǔn)
- End Sub
- End Class
- Module MyApp
- Sub Main()
- '建立銀行帳號(hào)對(duì)象
- Dim account1 As New BankAccount()
- '注冊(cè)事件處理程序
- AddHandler account1.LargeWithdraw, _
- AddressOf AccountHandlers.LogWithdraw
- AddHandler account1.LargeWithdraw, _
- AddressOf AccountHandlers.GetApproval
- '做一些觸發(fā)回調(diào)的事情
- account1.Withdraw(5001)
- End Sub
- End Module
結(jié)論
盡管使用事件的動(dòng)機(jī)和一些語(yǔ)法與早期版本的VB.NET編程相比仍然沒(méi)有改變,但是你不得不承認(rèn)情況有很大不同了。你能看到,你對(duì)如何響應(yīng)事件的控制力比以前大多了。如果你將使用委托編程,這就很實(shí)際了。
【編輯推薦】

















