zoukankan      html  css  js  c++  java
  • C#事件

    自从上一次自己写了一篇对委托的理解之后,剩下的一半-对事件的理解现在才写出来,也是拖得够久了。现在我们一起来看看C#的事件吧


    首先:为什么要有事件?

    上一篇文章展示了如何声明委托,调用委托和创建委托的实例。然而,这时委托虽然可以间接调用任意数量的方法,但是我们必须显式地调用委托,大部分时间,我们需要在特定事件发生时,自动执行委托,就如中介的例子,我们交代中介帮我们卖房子,当有客户来的咨询的时候,中介会自己主动带客户去了解房子,而不是每次还需要我们去告诉他,你应该带客户去看房子。既然委托类似中介,我们就应该让他有自主的能力。所以事件产生了。

    其次:如何声明事件?

    声明事件的方式和字段差不多的,不过大家要注意,委托是和事件一起的。所以事件的类型必须是委托。如下:

    Event DelegateName EventName;

    接着:订阅事件

    我们需要事件是因为当这个事件发生时,要引起一些其他变化。当某一个或多个方法订阅了该事件后,该事件发生时,就会调用所有订阅了该事件的方法。

    进行订阅的这个代码和委托添加方法类似。如下:

    EvenName+=LeadToEvent();

    取消订阅:

    EvenName-=LeadToEvent();

    最后:引发事件

    引发事件就像调用方法一样。引发了该事件,订阅了该事件的方法都会被调用。


    现在我们来让Demo说话吧

    1.新建一个MyEventDemo的控制台应用程序:

    image

    2.我们新建一个类。声明自己的委托和事件并添加一个引发事件的方法OnMyEvent

    image

    3.我们再新建一个类,里面添加一些需要订阅事件的方法

    image

    4.在Main函数实例化这两个类,并让两个方法去订阅这个事件

    image

    5.我们假设有一个事情调用了OnMyEvent,然后由于OnMyEvent被调用就会引发MyEvent事件。然后就会调用订阅了该事件的方法

    image

    6.运行程序

    image

    我们可以看到,这两个订阅了MyEvent事件的方法Show和Show2被调用了。

    以上就演示了一个基本的事件。

    PS:以下几点是我自己总结的需要注意的方面

    1.最好把事件对应的委托声明和事件的声明放在同一个类中。

    2.引发事件的方法也和事件放在同一个类中。

    3.订阅事件的方法的参数应该和对应的委托的参数相同。

    4.一个方法可以订阅多个事件,一个事件可以被多个方法订阅。


    如果需要更深入了解事件,大家可以看一下winform中的onclick事件。机制一样,不过是订阅事件的方法的参数通常是两个(object sender,EvenetArgs args)。以上有错误欢迎大家指正!!

  • 相关阅读:
    3. 技术专题
    3. 技术专题
    1. 个人经验总结
    2. 阿里巴巴Java开发手册主题
    自动化构建工具演化、对比、总结
    2. 阿里巴巴Java开发手册主题
    (转)高并发高流量的大型网站架构设计(二)
    (转)高并发高流量的大型网站架构设计(一)
    (转)可伸缩性最佳实践:来自eBay的经验
    (转)Application, Session, Cookie, Viewstate, Cache对象用法和区别
  • 原文地址:https://www.cnblogs.com/PengL-Net/p/5645512.html
Copyright © 2011-2022 走看看