当前位置: 首页 > news >正文

C#委托事件的实现

1、事件
在C#中事件是一种特殊的委托类型,用于在对象之间提供一种基于观察者模式的通知机制。
1.1、事件的发送方定义了一个委托,委托类型的声明包含了事件的签名,即事件处理器方法的签名。
1.2、事件的订阅者可以通过+=运算符来注册事件处理器。
1.3、当事件发送方触发事件时,所有注册的事件处理器会被依次调用。
2、委托事件的实现
2.1、事件发布类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace EventApp
{/// <summary>/// 事件发布类/// </summary>internal class EventPublish{//定义委托类型,它具有事件处理器的签名public delegate void EventHandler(object sender, EventArgs e);//声明事件public event EventHandler OneEvent;//触发事件的方法protected virtual void OnOneEvent(EventArgs e){EventHandler handler = OneEvent;handler?.Invoke(this, e);}//示例方法,可以在需要的时候触发事件public void TriggerEvent(){OnOneEvent(EventArgs.Empty);}}
}

2.1、事件订阅类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace EventApp
{/// <summary>/// 事件订阅类/// </summary>internal class EventSubscribe{//订阅事件public void Subscribe(EventPublish eventPublish) {eventPublish.OneEvent += EventPublish_OneEvent;}//事件处理函数private void EventPublish_OneEvent(object sender, EventArgs e){Console.WriteLine("Event is triggered!");}}
}

2.3、委托事件的实现

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace EventApp
{internal class Program{static void Main(string[] args){EventPublish eventPublish = new EventPublish();EventSubscribe eventSubscribe = new EventSubscribe();//订阅事件eventSubscribe.Subscribe(eventPublish);Console.Write("Press <Enter> to trigger event\n");while (Console.ReadKey().Key != ConsoleKey.Enter) { Thread.Sleep(100); }//触发事件eventPublish.TriggerEvent();Console.ReadKey();}}
}

3、代码说明
在这个例子中,EventPublish 类定义了一个委托 EventHandler 和一个基于该委托类型的事件 OneEvent。OnOneEvent 方法是触发事件的方法,它检查事件是否有注册的处理器,并按顺序调用它们。TriggerEvent 方法用于触发事件。EventSubscribe 类中的 Subscribe 方法用于订阅事件,并提供了事件处理器 EventHandler。在 Main 方法中,我们创建了 EventPublish 和 EventSubscribe 的实例,并通过 Subscribe 方法将 EventHandler 注册到 OneEvent 上。最后通过 TriggerEvent 方法触发了事件,控制台上输出了 “Event is triggered!”。
4、运行效果
在这里插入图片描述

相关文章:

  • RNN文献综述
  • CC2530寄存器编程学习笔记_点灯
  • C编程使用clock函数实现计算一段代码的执行时间:毫秒单位
  • 17.分频器设计拓展练习-任意分频通用模块
  • XML Schema 属性
  • 揭秘:离心风机风量背后的科学原理
  • 没什么事情,随记一下 -出差
  • Labview_压缩文件
  • 关于string的‘\0‘与string,vector构造特点加部分特别知识点的讨论
  • 详细对比Java SPI、Spring SPI 和 Dubbo SPI
  • 【机器学习】特征选择:精炼数据,提升模型效能
  • 暴雨突袭不可不看!水浸传感器作用有这些
  • ubuntu 查看联网配置
  • PaddleVideo:Squeeze Time算法移植
  • WebOffice在线编微软Offfice,并以二进制流的形式打开Word文档
  • 【Amaple教程】5. 插件
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • express.js的介绍及使用
  • Git 使用集
  • HTTP请求重发
  • JavaScript服务器推送技术之 WebSocket
  • Leetcode 27 Remove Element
  • mac修复ab及siege安装
  • mysql innodb 索引使用指南
  • Spring Cloud Feign的两种使用姿势
  • TypeScript迭代器
  • 不上全站https的网站你们就等着被恶心死吧
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 用jQuery怎么做到前后端分离
  • 在Mac OS X上安装 Ruby运行环境
  • No resource identifier found for attribute,RxJava之zip操作符
  • linux 淘宝开源监控工具tsar
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ###C语言程序设计-----C语言学习(6)#
  • $(function(){})与(function($){....})(jQuery)的区别
  • (1)虚拟机的安装与使用,linux系统安装
  • (3)医疗图像处理:MRI磁共振成像-快速采集--(杨正汉)
  • (6)STL算法之转换
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (LeetCode) T14. Longest Common Prefix
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (力扣题库)跳跃游戏II(c++)
  • (转)用.Net的File控件上传文件的解决方案
  • ****Linux下Mysql的安装和配置
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .jks文件(JAVA KeyStore)
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • /tmp目录下出现system-private文件夹解决方法
  • @Pointcut 使用
  • @property括号内属性讲解