当前位置:首页 > 网络编程 > 软件语言 > .NET > Henry的VB.NET之旅(十四)—动态关联事件与处理程序

Henry的VB.NET之旅(十四)—动态关联事件与处理程序

点击次数:50 次 发布日期:2008-11-06 08:07:47 作者:源代码网
源代码网推荐
广告载入中
Henry的VB.NET之旅(十四)—动态关联事件与处理程序
源代码网推荐
源代码网推荐 韩睿
源代码网推荐
源代码网推荐
源代码网推荐
源代码网推荐“要解释新的事件处理程序的方法,我们需要先说几个重要的问题。”大李开始严肃起来,我也只得挪动一下身子,表现出正襟危坐的架势。
源代码网推荐
源代码网推荐“我们首先讨论一下事件是怎么产生的。事件是对象发送的消息,以发信号通知操作的发生。操作可能是由用户交互,例如鼠标单击引起的,也可能是由某些其他的程序逻辑触发的。引发事件的对象叫做事件发送方(啊,听到这,Henry突然明白了事件处理程序中的第一个参量为什么叫Sender了,就是指事件发送的那个对象呀)。捕获事件并对其作出响应的对象叫做事件接收方。在事件通讯中,事件发送方类不知道哪个对象或方法将接收到它引发的事件。所需要的是在源和接收方之间存在一个媒介,或类似指针的机制。.NET 框架定义了一个特殊的类型Delegate,也就是委托,该类型提供函数指针的功能。”
源代码网推荐
源代码网推荐“啊,我早就听说过委托的,就是不知道它是什么意思咧!”我做出期盼状。
源代码网推荐
源代码网推荐“委托就是可用于调用其他对象方法的对象。与其他的类不同,委托类具有一个签名,并且它只能对与其签名匹配的方法进行引用。”大李继续说着。

源代码网推荐
源代码网推荐““噢,委托也就是一个函数指针喽。”我好象理解了一点。
源代码网推荐
源代码网推荐“差不多,委托可以等效于一个类型安全函数指针或一个回调。但不同于函数指针,Visual Basic.NET 委托是基于 System.Delegate 类的引用类型,它可以引用我们先前说过的共享方法(详见《共享成员》一篇)和实例方法。”
源代码网推荐
源代码网推荐“明白了一点。”我一边点头一边说,“我们想要动态调用事件处理程序,是不是就要利用委托来声明是哪个程序用于处理事件呀?”
源代码网推荐
源代码网推荐大李惊异地看着我,露出了几分赞许。
源代码网推荐
源代码网推荐“委托是.NET中的一个重要的类型,我们以后还需要详细讨论。现在我们需要关注的就是如何来通过操作委托来实现将事件与事件处理程序动态联系起来。”大李接着就开始修改代码:
源代码网推荐
源代码网推荐
源代码网推荐
源代码网推荐Module Module1
源代码网推荐
源代码网推荐Public Class CHenry
源代码网推荐
源代码网推荐 Public Event EventHR() " 声明一个事件
源代码网推荐
源代码网推荐 Sub CauseSomeEvent()
源代码网推荐
源代码网推荐 RaiseEvent EventHR() " 引发事件
源代码网推荐
源代码网推荐 End Sub
源代码网推荐
源代码网推荐 End Class
源代码网推荐
源代码网推荐
源代码网推荐
源代码网推荐 Dim obj As New CHenry()
源代码网推荐
源代码网推荐 Sub Obj_EventHR() "在Handles之后声明事件
源代码网推荐
源代码网推荐 MsgBox("事件处理器捕捉到了事件.") "处理事件.
源代码网推荐
源代码网推荐 End Sub
源代码网推荐
源代码网推荐 Sub Main()
源代码网推荐
源代码网推荐 AddHandler obj.EventHR, AddressOf Obj_EventHR
源代码网推荐
源代码网推荐 obj.CauseSomeEvent() "调用对象去引发事件
源代码网推荐
源代码网推荐End Sub
源代码网推荐
源代码网推荐End Module
源代码网推荐
源代码网推荐
源代码网推荐
源代码网推荐
源代码网推荐“看到有什么不同吗?”大李转过身来问我。
源代码网推荐
源代码网推荐“主要有两个不同,首先是obj的定义不再用WithEvents来标识了,因此事件处理程序obj_EventHR()也就不能通过Handles关键字来声明事件,也就是说EventHR事件与事件处理程序没有用WithEvent-Handles进行关联;其次,是使用了AddHandle和Addressof……”说到这,我也没有词了,只能语焉不详。
源代码网推荐
源代码网推荐“呵呵,我来帮你接着说。”大李拍了拍我的肩膀,接着说“先说Addressof吧,AddressOf 运算符创建的是一个指向指定的过程的过程委托。我们刚才说过委托相当于一个函数指针,那么AddressOf就是委托的操作符,通过它能得到委托的引用。”
源代码网推荐
源代码网推荐见到我稍稍明白了,大李又接着说:“光看AddHandle能够将obj.EventHR事件与Obj_EventHR事件处理程序关联起来的作法,你肯定不了解我所说的动态关联好处在哪里。因为我没提到另一个方法RemoveHandler。它的使用方法和AddHandle是一样的,比如:

源代码网推荐

源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华