最近在总结一些基础的东西,主要是学起来很难懂,但是在日常又有可能会经常用到的东西。前面介绍了 C# 的 AutoResetEvent的使用介绍, 这次介绍事件(event)。

  事件(event),对于初学者来说,确实比较神秘,难懂。但是在日常编程过程中却经常遇到。事件使用得当,会让你的代码更加整洁,也能少些很多代码。

  一、Event事件,是一种封装过的委托。

  它拥有以下三要素:

    1. 事件发行者:达到某些条件时激发事件的对象

    2. 事件订阅者:订阅事件并对事件发生时进行处理的对象

    3. 定义发行者和订阅者关系,一个发行者可能会有多个订阅者。

  事件发行者和事件订阅者通过委托(delegate) 来实现发送方和接收方的事件触发。

  它拥有哪些好处:

    在以往我们编写订阅这类程序中,往往采用等待机制,为了等待某件事情的发生,需要不断地检测事情什么时候发生,而通过事件(event),可以大大简化了这种过程:

    1. 使用事件,可以很方便地确定程序执行顺序。

    2. 当事件驱动程序等待事件时,它不占用很多资源。事件驱动程序与过程式程序最大的不同就在于,程序不再不停地检查输入设备,而是呆着不动,等待消息的到来,每个输入的消息会被排进队列,等待程序处理它。如果没有消息在等待,则程序会把控制交回给操作系统,以运行其他程序。

    3. 事件简化了编程。事件订阅者只是简单地将消息传送给事件发行者,由发行者的事件驱动程序确定事件的处理方法。不必知道程序的内部订阅触发机制,只是需要知道如何传递消息即可。

  二、事件和委托的区别

    1.委托允许直接通过委托去访问相应的处理函数,而事件只能通过公布的回调函数去调用,

    2.事件只能通过“+=”,“-=”方式注册和取消订户处理函数,而委托除此之外还可以使用“=”直接赋值处理函数。

  三、事件的声明(Event)

    在类的内部声明事件,首先必须声明该事件的委托类型。例如:

    public delegate void NumManipulationHandler(NumEventArgs e);

    然后,声明事件本身,使用 event 关键字:

    // 基于上面的委托定义事件public event NumManipulationHandler ChangeNum;

    上面的代码定义了一个名为 NumManipulationHandler 的委托和一个名为 ChangeNum 的事件,该事件是在某个值生成的时候会调用委托事件。

  四、实例

    public class Program{public static void Main(){NumEvent even = new NumEvent(0);even.ChangeNum += EventAction.Action;even.SetValue(7);even.SetValue(11);System.Console.ReadKey();}}public class NumEvent{private int value;public delegate void NumManipulationHandler(NumEventArgs e);public event NumManipulationHandler ChangeNum;public virtual void OnChangeNum(NumEventArgs e){ChangeNum?.Invoke(e);}public NumEvent(int n){SetValue(n);}public void SetValue(int n){if (value != n){NumEventArgs e = new NumEventArgs(n);value = n;OnChangeNum(e);}}}public class EventAction{public static void Action(NumEventArgs e){System.Console.WriteLine("value : " + e.value);}}public class NumEventArgs : EventArgs{public int value;public NumEventArgs(int _value){this.value = _value;}}

C#总结(二)事件Event 介绍总结相关推荐

  1. 事件Event 介绍总结

    最近在总结一些基础的东西,主要是学起来很难懂,但是在日常又有可能会经常用到的东西.前面介绍了 C# 的 AutoResetEvent的使用介绍, 这次介绍事件(event). 事件(event),对于 ...

  2. 事件根基event_base、事件循环event_loop、事件event、信号事件SignalEvent

    一.event_base (一) libevent简介与浅谈event_base libevent实际上就是对底层select/poll/epoll等进行了封装,每个event_base都有一种&qu ...

  3. 事件Event:带你体验鸿蒙轻内核中一对多、多对多任务同步

    摘要:本文通过分析鸿蒙轻内核事件模块的源码,深入掌握事件的使用. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列十二 事件Event>,原文作者:zhushy . 事件(Event)是一 ...

  4. js事件(Event)知识整理

    鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover  之后如果光标继续在元素上移动,则不断触发mousemove  如果按下鼠标上的设备(左键,右键,滚轮--),则触发mousedow ...

  5. 秒杀多线程第六篇 经典线程同步 事件Event

    阅读本篇之前推荐阅读以下姊妹篇: <秒杀多线程第四篇 一个经典的多线程同步问题> <秒杀多线程第五篇 经典线程同步关键段CS> 上一篇中使用关键段来解决经典的多线程同步互斥问题 ...

  6. [数据库] Navicat for MySQL事件Event实现数据每日定期操作

    在我们操作数据库过程中,通常会遇到一些某个时间点操作数据库的问题,例如:         (1).每天凌晨12点对数据库进行定时备份,结算和汇总:         (2).每天凌晨2点删除数据库前三天 ...

  7. Python 线程事件 Event - Python零基础入门教程

    目录 一.Python 线程事件 Event 函数介绍 二.Python 线程事件 Event 原理 三.Python 线程事件 Event 使用 四.重点总结 五.猜你喜欢 零基础 Python 学 ...

  8. iframe关闭时触发事件_超详细的mysql数据库事件--定时任务介绍及日常管理

    概述 由于最近在做某些日志表的清理工作,会用到定时任务,所以这里也简单介绍一下mysql如何用事件来实现定时任务. 后面会介绍两个日志表清理实现方案,一种是传统的定时delete,另一种会稍微复杂点, ...

  9. js事件Event对象(自定义事件对象 CustomEvent)

    文章目录 一.参考 二.Event 接口介绍 2.1 事件分类 三. 创建过时Event不推荐 3.1 document.createEvent 3.1.1 语法`var event = docume ...

最新文章

  1. 一条推文卖出 290 万美元天价?网友:我竟是隐藏的富翁
  2. BZOJ4754 JSOI2016独特的树叶(哈希)
  3. 网页性能分析不完全指南
  4. 摄像头夜间拍摄画面有拖影_让客厅秒变健身房,OPPO智能电视R1+摄像头上手体验...
  5. 我的Go+语言初体验——(6)整型有理数数据类型
  6. jx8net一定在所有的方方面面都更坚强更勇敢了吧
  7. mysql xtrabackup 保护模式_MySQL Xtrabackup备份原理和实现细节
  8. [原创]深入理解C# 3.x的新特性(3):从Delegate、Anonymous Method到Lambda Expression
  9. STM32F103mini教程学习总结与心得(五)---->通用定时器
  10. 动态规划-----(思路详解)
  11. 手机销售网jsp程序设计
  12. 你要的Chrome插件都在这里了
  13. 使用Python和MySQL实现网上购物管理系统
  14. Visual studio系统找不到指定文件的解决办法
  15. 倡导低碳低成本出行,神州租车用实力说话
  16. 以地理国情调查任务为基础的地图矢量化流程研究
  17. conda的一个坑。channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch - https://mirro
  18. 使用python抓取App数据
  19. 用数据说话,Python就业前景分析
  20. 从勾股定理到立方公式的整数解

热门文章

  1. Method.invoke 异常捕获
  2. 装饰模式与代理模式的区别
  3. 412. Fizz Buzz
  4. windows下安装及配置 golang 的Web框架Beego环境
  5. vue生成包报错error from UglifyJs
  6. 【差分】bzoj 1676 [Usaco2005 Feb]Feed Accounting 饲料计算
  7. 数据库学习3 Distinct Group By
  8. 财贸企业实行国有民营机制的调查
  9. 好久不碰Blog,最近要二次毕业了,继续写点警醒自己的话
  10. delegate和event(转载too)