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)。以上有错误欢迎大家指正!!

  • 相关阅读:
    整理+学习《骆昊-Java面试题全集(下)》
    整理+学习《骆昊-Java面试题全集(中)》
    Linux专家心目中的最佳Linux发行版有哪些?
    常用的Git Tips
    Python 3 加密简介
    LXD 2.0 系列(一):LXD 入门
    英特尔构建云集成编排工具
    Unix操作系统中UUCP知识详细讲解
    Windows 的 AD 域寄生于 Linux 机器
    Git秘籍:在 Git 中进行版本回退
  • 原文地址:https://www.cnblogs.com/PengL-Net/p/5645512.html
Copyright © 2011-2022 走看看