事件的主要目的就是为了防止订阅者之间互相干扰

发布者:通知某件事情发生-(发布了博客)

订阅者:关注发布者发布的事件-(关注了博客)

事件触发和注册

事件发生时,会通知所有关注该事件的订阅者(发布了一条新的博客)

想在事件发布时被通知,必须注册表示工作(关注的博客有新的动态)

一个订阅者不知道和不干扰其他的订阅者

事件发生时,通知订阅者,就是调用订阅者的注册函数

订阅者其实就是对象

注册就是告诉发布者调用哪个注册函数.

事件声明

{delegate void Handler();public event Handler Newtarget;//Newtarget是一个成员,并且会被隐式自动初始化成null}              /*委托类型 事件名*/

方法可以是静态方法-实例方法-匿名方法-Lambda表达式

Newtarget += 方法(这个相当于是关注)
Newtarget -= 方法(这个相当于取消关注)

事件触发

if(Newtarget != null)
{
Newtarget();
}

事件触发,我们都要检测是否有人关注

例如我有新的商品或者新的发布内容,那首先看看有没有人关注我,有的话我再推送给所有关注我的人

事件可以理解成是一种封装的受限制的委托

举个事件发生以及通知的整个过程

首先定义委托和事件

然后判断是否有人订阅

public class Dog{static int Num;public delegate void Handler();public  static event Handler NewDog;public Dog(string name){++Num;if (NewDog != null){NewDog();}}}

然后我们就要注册函数

 class Client{public void WantaDog(){Console.WriteLine("Ok, I want to see the new dog");}}

注册函数类型要跟委托类型一致

例如我上面无返回值无输入参数

然后定义两个客户.

Client c1 = new Client();
Client c2 = new Client();

然后订阅事件

 Dog.NewDog += c1.WantaDog;Dog.NewDog += c2.WantaDog;

创建新对象

Dog dog = new Dog("旺");

运行,两个客户都被通知到了

这个就是事件的发生与触发

using System;
namespace Event
{//事件发布者class Dog{//声明关于事件的委托public delegate void Handler();//声明事件public static event Handler NewDog;public Dog(string name) {if(NewDog != null){NewDog();Console.WriteLine("\nhere comes a new dog");}}}//事件接收者class Buyer{//事件处理public void Man(){Console.WriteLine("\nI well see it");}}class Trigger{static void Main(string[] args){DateTime now = new DateTime(2022,3,11,15,31,55);Console.WriteLine("\n当前时间:"+now);Buyer no1 = new Buyer();Buyer no2 = new Buyer(); Dog.NewDog += no1.Man;//注册事件处理Dog.NewDog += no2.Man;Dog dog = new Dog("旺财");//有新狗狗触发事件Console.ReadLine();}}
}

C#-Event事件相关推荐

  1. GIL+死锁与递归锁+信号量+event事件

    GIL全局解释器锁: GIL本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一进程内的多个线程 必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,即同一进程下的多个线 ...

  2. javascript中window.event事件用法详解

    前两天写程序时因为要用到javascript中的window.event事件,于是就在网上搜了一下,终于找到一篇不错的文章,来与大家分享下:  描述   event代表事件的状态,例如触发event对 ...

  3. python全栈开发第36天------GIL全局解释锁、死锁现象和递归锁、信号量、Event事件、线程...

    一.GIL全局解释锁 定义:本质就是一把互斥锁,相当于执行权限,每个进程内都会存在一把GIL,同一个进程必须抢到GIL之后才能使用Cpython解释器来执行自己的代码,无法并行 用途:因为Cpytho ...

  4. 自定event事件之手动触发(一)

    创建组件:Y_GLOBAL_EVENT 视图:V_MAIN 窗口:W_MAIN Application:Y_GLOBAL_EVENT 添加上下文 添加UI控件button和textview       ...

  5. python基础--GIL全局解释器锁、Event事件、信号量、死锁、递归锁

    ps:python解释器有很多种,最常见的就是C python解释器 GIL全局解释器锁: GIL本质上是一把互斥锁:将并发变成串行,牺牲效率保证了数据的安全 用来阻止同一个进程下的多个线程的同时执行 ...

  6. 第53天:鼠标事件、event事件对象

    -->鼠标事件 -->event事件对象 -->默认事件 -->键盘事件(keyCode) -->拖拽效果 一.鼠标事件 onclick ---------------鼠 ...

  7. JS Event事件

    // 给一个element绑定一个针对event事件的响应 // 移除element对象对于event事件发生时执行某个函数 var box = document.getElementById(&qu ...

  8. 学习笔记(30):Python网络编程并发编程-Event事件

    立即学习:https://edu.csdn.net/course/play/24458/296447?utm_source=blogtoedu threading.Event事件 1.概念及功能:主要 ...

  9. 4,GIL全局解释器锁,event事件,信号量

    今日内容 1,GIL全局解释器锁 2,死锁 3,信号量 4,event事件 5,队列一:GIL全局解释器锁 什么是GIL 全局解释器锁: 它的本质也是一把互斥锁,是在CPython解释器锁,将并发变为 ...

  10. JavaScript之DOM对象(Event事件)

    文章目录 一.Event事件汇总 二.用法案例 1.serche搜索框 2.onload加载 3.事件绑定--标签内 4.事件绑定--JS接函数 5.onsubmit表单提交 6.事件传播 HTML ...

最新文章

  1. [译] JWT 与 Spring Cloud 微服务
  2. c++ 多重背包状态转移方程_【模板】各种背包问题amp;讲解
  3. LESSON 12.7 梯度提升树的参数空间与TPE优化
  4. Android开发之在程序右上角添加菜单选项
  5. java 的toString()函数
  6. SAP ABAP关键字在Chrome浏览器里高亮显示的实现原理 - How is ABAP keyword highlight implemented in Chrome
  7. html纵向的跑马灯效果,HTML+CSS入门 如何实现跑马灯/走马灯效果
  8. springboot 1.5.2 集成kafka 简单例子
  9. python每行输出5个数_python打印杨辉三角及输出第m行第k个数
  10. python数据库框架_目前最受欢迎的12个Python开源框架
  11. PHP文件下载过滤类
  12. shell脚本和常用命令
  13. appium 处理滑动的方法
  14. python爬虫网页图片并保存到本地
  15. 区分指针数组和数组指针
  16. 绕过杀软(二)——免杀exe文件(360、火绒免杀)
  17. 丁向荣单片机pdf_单片微机原理与接口技术:基于STC15系列单片机
  18. 检验二元分解是否为无损分解(非加性)
  19. wox无法启动解决办法:
  20. python二维游戏编程 最强大脑游戏_4. Molten从零开始做独立游戏-python学习

热门文章

  1. [iOS开发]iOS调用系统相册相机
  2. 在nvidia AGX 边缘服务器安装kubeEdge
  3. EsgynDB 使用JDBC UDR访问远程Trafodion的几个问题小结
  4. PLC可编程控制器概述
  5. 程序员该怎么学习---弱水三千,只取一瓢
  6. HTTPS 与 SSL 证书
  7. 征文 | 青出于蓝而胜于蓝 国货之光GBase
  8. Web快速开发平台,基于二次开发平台
  9. 我的世界服务器无限时间,我的世界无限时间版本
  10. android res编辑器,Android Apk编辑器(ApkModifier) V3.6.0