在定义委托时,前面加上event关键字,可以保证该委托不能在外部被随意触发,两者异同:

  注册 注销 内部触发 外部触发
delegate += -= Invoke Invoke
event delegate += -= Invoke 不允许

所以,event关键字有助于提高类的封装性,物理隔绝代码耦合,迫使类设计更追求高内聚。

定义一个显示消息的event并包装

        public event EventHandler evt_log_handle;protected virtual void On_evt_log_handle(object obj, EventArgs e){if (this.evt_log_handle != null)this.evt_log_handle(obj, e);}

在外部触发:

On_evt_log_handle("日志", null);

在其他类中,可以注册这个事件

m_project.evt_log_handle += m_process_evt_log_handle;  m_project为定义event的类的实例

定义事件实现的代码

        void m_process_evt_log_handle(object sender, EventArgs e){string sLog = sender as string;...}

控制台输入'a'累加到上限实现事件的示例

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApp2
{class Program{static void Main(string[] args){Counter c = new Counter(new Random().Next(10));c.ThresholdReached += c_ThresholdReached;  //注册事件Console.WriteLine("press 'a' key to increase total");while (Console.ReadKey(true).KeyChar == 'a'){Console.WriteLine("adding one");c.Add(1);}}static void c_ThresholdReached(object sender, ThresholdReachedEventArgs e) //事件实现{Console.WriteLine("The threshold of {0} was reached at {1}.", e.Threshold, e.TimeReached);Environment.Exit(0);}}class Counter{private int threshold;private int total;public Counter(int passedThreshold){threshold = passedThreshold;}public void Add(int x){total += x;if (total >= threshold){ThresholdReachedEventArgs args = new ThresholdReachedEventArgs();args.Threshold = threshold;args.TimeReached = DateTime.Now;OnThresholdReached(args);}}public event EventHandler<ThresholdReachedEventArgs> ThresholdReached; protected virtual void OnThresholdReached(ThresholdReachedEventArgs e){if (this.ThresholdReached != null){this.ThresholdReached(null, e);}}}public class ThresholdReachedEventArgs : EventArgs{public int Threshold { get; set; }public DateTime TimeReached { get; set; }}}

C#event EventHandler事件触发相关推荐

  1. 对事件触发(EventHandler)的简单理解

    当某个对象的某个事件或者是执行过程发生了,这个对象可以通过事件通知另外一个对象,另外一个对象可以通过传递进来的参数进行相应的处理: 网上有很多关于事件触发的例子,借鉴其中的一个例子对事件触发做如下理解 ...

  2. Event事件-6:new Event自定义事件 / addEvent绑定自定义 / trigger触发自定义 / removeEvent移除自定义

    new Event 自定义事件 new Event(typeArg, eventInit) typeArg 事件名称 eventInit "bubbles",可选,Boolean类 ...

  3. vue中点击加号_vue 组件之间事件触发($emit)与event Bus($on)的用法说明

    组件之间事件触发 之前使用组件,并不是很频繁,是水平的问题,目前工作中,公司大佬带着我手写过一个组件,再此很感谢他的指导.目前简单的组件已经有了自己的逻辑思维,正在从低级码农向中级码农蜕变.废话不多说 ...

  4. cocos 的EventHandler 事件派发器

    cocos 的EventHandler 事件派发器 cc.Component.EventHandler 类 官方说明 "EventHandler" 类用来设置场景中的事件回调,该类 ...

  5. event对象(触发机制)

    Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态,常用事件如下: 事件 触发时机 onchange 用户改变域的内容 onclick 鼠标点击某个对 ...

  6. 函数计算自动化运维实战 3 -- 事件触发自动创建快照

    函数计算 阿里云函数计算是一个事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.函数计算会为您准备好计算资源,以弹性.可靠的方式运行您的代码,并提供日志查询,性能 ...

  7. 函数计算自动化运维实战2 -- 事件触发 eip 自动转移

    函数计算 阿里云函数计算是一个事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.函数计算会为您准备好计算资源,以弹性.可靠的方式运行您的代码,并提供日志查询,性能 ...

  8. node.js中对Event Loop事件循环的理解

    javascript是单线程的,所以任务的执行都需要排队,任务分为两种,一种是同步任务,一种是异步任务. 同步任务是进入主线程上排队执行的任务,上一个任务执行完了,下一个任务才会执行. 异步任务是不进 ...

  9. node 版本升级_Node-RED: 自动化事件触发工具的安装与介绍

    Node-RED 介绍 Node-RED 是一种基于流程的编程工具 由 IBM 的新兴技术服务团队原创开发 Node-RED 是一种事件触发工具,和 StackStorm 类似, 可以归类为上层的自动 ...

最新文章

  1. 程序员颈椎病康复秘籍
  2. PHP源码设置超出隐藏,怎样隐藏文本的超出部分
  3. Py之BaseHTTPServer:Python库之BaseHTTPServer的简介、安装、使用方法之详细攻略
  4. 放弃Python转向Go语言:我们找到了以下9大理由
  5. linux学习第九天 (Linux就该这么学)
  6. html5手机端三级联动城市选择代码,省市县三级联动(jQuery手机端收货地址选择地区代码)...
  7. MAT分析android内存泄漏
  8. java spi与api,SPI和API之间的区别?
  9. python刷leetcode_零基础python刷leetcode -- 1. Two Sum
  10. 京东物流研发岗位会背景调查吗_【秋招资讯】京东健康于港交所主板上市 | 京东健康2021校园招聘火热进行中!...
  11. 【生活相关】实验室专题研讨PPT模板说明备忘
  12. Win10开始菜单美化:磁贴放置分块图片
  13. ESXI安装网卡或HBA卡驱动
  14. 盘点阿里巴巴 33 个牛逼的开源项目,你用过哪几个?
  15. LaTeX公式编辑器+mathtype6.9b
  16. React Antd4 CRA / Next.js / Vite 按需加载组件的 CSS / Less
  17. 【opencv】双目视觉下空间坐标计算/双目测距 6/13更新
  18. 高级网格交易学习笔记
  19. 程序员在面试时,如何回答未来规划方面的问题
  20. 治精神疾病不能光靠吃药,还要学会自救

热门文章

  1. 基于ZYNQ的千兆网项目(1)
  2. blog6-beta_1
  3. 解决定位螺丝孔连接铜皮问题
  4. uniapp获取元素的宽度、高度
  5. (四)我的JavaScript系列:原型链
  6. oracle中ccuser,Oracle数据库查询与SESSIONS_PER_USER大于40
  7. AUTOSAR方法论剖析
  8. 头像,背景图片上传详解
  9. 在 linux 上使用 sendmail 发送邮件
  10. C++11标准模板(STL)- 算法(std::adjacent_difference)