C#事件
自从上一次自己写了一篇对委托的理解之后,剩下的一半-对事件的理解现在才写出来,也是拖得够久了。现在我们一起来看看C#的事件吧
首先:为什么要有事件?
上一篇文章展示了如何声明委托,调用委托和创建委托的实例。然而,这时委托虽然可以间接调用任意数量的方法,但是我们必须显式地调用委托,大部分时间,我们需要在特定事件发生时,自动执行委托,就如中介的例子,我们交代中介帮我们卖房子,当有客户来的咨询的时候,中介会自己主动带客户去了解房子,而不是每次还需要我们去告诉他,你应该带客户去看房子。既然委托类似中介,我们就应该让他有自主的能力。所以事件产生了。
其次:如何声明事件?
声明事件的方式和字段差不多的,不过大家要注意,委托是和事件一起的。所以事件的类型必须是委托。如下:
Event DelegateName EventName;
接着:订阅事件
我们需要事件是因为当这个事件发生时,要引起一些其他变化。当某一个或多个方法订阅了该事件后,该事件发生时,就会调用所有订阅了该事件的方法。
进行订阅的这个代码和委托添加方法类似。如下:
EvenName+=LeadToEvent();
取消订阅:
EvenName-=LeadToEvent();
最后:引发事件
引发事件就像调用方法一样。引发了该事件,订阅了该事件的方法都会被调用。
现在我们来让Demo说话吧
1.新建一个MyEventDemo的控制台应用程序:
2.我们新建一个类。声明自己的委托和事件并添加一个引发事件的方法OnMyEvent
3.我们再新建一个类,里面添加一些需要订阅事件的方法
4.在Main函数实例化这两个类,并让两个方法去订阅这个事件
5.我们假设有一个事情调用了OnMyEvent,然后由于OnMyEvent被调用就会引发MyEvent事件。然后就会调用订阅了该事件的方法
6.运行程序
我们可以看到,这两个订阅了MyEvent事件的方法Show和Show2被调用了。
以上就演示了一个基本的事件。
PS:以下几点是我自己总结的需要注意的方面
1.最好把事件对应的委托声明和事件的声明放在同一个类中。
2.引发事件的方法也和事件放在同一个类中。
3.订阅事件的方法的参数应该和对应的委托的参数相同。
4.一个方法可以订阅多个事件,一个事件可以被多个方法订阅。
如果需要更深入了解事件,大家可以看一下winform中的onclick事件。机制一样,不过是订阅事件的方法的参数通常是两个(object sender,EvenetArgs args)。以上有错误欢迎大家指正!!