C#event EventHandler事件触发
在定义委托时,前面加上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事件触发相关推荐
- 对事件触发(EventHandler)的简单理解
当某个对象的某个事件或者是执行过程发生了,这个对象可以通过事件通知另外一个对象,另外一个对象可以通过传递进来的参数进行相应的处理: 网上有很多关于事件触发的例子,借鉴其中的一个例子对事件触发做如下理解 ...
- Event事件-6:new Event自定义事件 / addEvent绑定自定义 / trigger触发自定义 / removeEvent移除自定义
new Event 自定义事件 new Event(typeArg, eventInit) typeArg 事件名称 eventInit "bubbles",可选,Boolean类 ...
- vue中点击加号_vue 组件之间事件触发($emit)与event Bus($on)的用法说明
组件之间事件触发 之前使用组件,并不是很频繁,是水平的问题,目前工作中,公司大佬带着我手写过一个组件,再此很感谢他的指导.目前简单的组件已经有了自己的逻辑思维,正在从低级码农向中级码农蜕变.废话不多说 ...
- cocos 的EventHandler 事件派发器
cocos 的EventHandler 事件派发器 cc.Component.EventHandler 类 官方说明 "EventHandler" 类用来设置场景中的事件回调,该类 ...
- event对象(触发机制)
Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态,常用事件如下: 事件 触发时机 onchange 用户改变域的内容 onclick 鼠标点击某个对 ...
- 函数计算自动化运维实战 3 -- 事件触发自动创建快照
函数计算 阿里云函数计算是一个事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.函数计算会为您准备好计算资源,以弹性.可靠的方式运行您的代码,并提供日志查询,性能 ...
- 函数计算自动化运维实战2 -- 事件触发 eip 自动转移
函数计算 阿里云函数计算是一个事件驱动的全托管计算服务.通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传.函数计算会为您准备好计算资源,以弹性.可靠的方式运行您的代码,并提供日志查询,性能 ...
- node.js中对Event Loop事件循环的理解
javascript是单线程的,所以任务的执行都需要排队,任务分为两种,一种是同步任务,一种是异步任务. 同步任务是进入主线程上排队执行的任务,上一个任务执行完了,下一个任务才会执行. 异步任务是不进 ...
- node 版本升级_Node-RED: 自动化事件触发工具的安装与介绍
Node-RED 介绍 Node-RED 是一种基于流程的编程工具 由 IBM 的新兴技术服务团队原创开发 Node-RED 是一种事件触发工具,和 StackStorm 类似, 可以归类为上层的自动 ...
最新文章
- 程序员颈椎病康复秘籍
- PHP源码设置超出隐藏,怎样隐藏文本的超出部分
- Py之BaseHTTPServer:Python库之BaseHTTPServer的简介、安装、使用方法之详细攻略
- 放弃Python转向Go语言:我们找到了以下9大理由
- linux学习第九天 (Linux就该这么学)
- html5手机端三级联动城市选择代码,省市县三级联动(jQuery手机端收货地址选择地区代码)...
- MAT分析android内存泄漏
- java spi与api,SPI和API之间的区别?
- python刷leetcode_零基础python刷leetcode -- 1. Two Sum
- 京东物流研发岗位会背景调查吗_【秋招资讯】京东健康于港交所主板上市 | 京东健康2021校园招聘火热进行中!...
- 【生活相关】实验室专题研讨PPT模板说明备忘
- Win10开始菜单美化:磁贴放置分块图片
- ESXI安装网卡或HBA卡驱动
- 盘点阿里巴巴 33 个牛逼的开源项目,你用过哪几个?
- LaTeX公式编辑器+mathtype6.9b
- React Antd4 CRA / Next.js / Vite 按需加载组件的 CSS / Less
- 【opencv】双目视觉下空间坐标计算/双目测距 6/13更新
- 高级网格交易学习笔记
- 程序员在面试时,如何回答未来规划方面的问题
- 治精神疾病不能光靠吃药,还要学会自救