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

C# 中的事件

1.事件的概念 

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

2.示例代码 

        下面是一个简单的C#事件的例子:

using System;public class EventExample
{// 定义委托类型,它具有事件处理器的签名public delegate void SimpleEventHandler(object sender, EventArgs e);// 声明事件public event SimpleEventHandler SimpleEvent;// 触发事件的方法protected virtual void OnSimpleEvent(EventArgs e){SimpleEventHandler handler = SimpleEvent;handler?.Invoke(this, e);}// 示例方法,可以在需要的时候触发事件public void RaiseEvent(){OnSimpleEvent(EventArgs.Empty);}
}public class EventSubscriber
{public void Subscribe(EventExample eventExample){// 订阅事件eventExample.SimpleEvent += EventHandler;}private void EventHandler(object sender, EventArgs e){Console.WriteLine("Event triggered.");}
}class Program
{static void Main(){EventExample eventSource = new EventExample();EventSubscriber subscriber = new EventSubscriber();subscriber.Subscribe(eventSource);// 触发事件eventSource.RaiseEvent();}
}

        在这个例子中,EventExample 类定义了一个委托 SimpleEventHandler 和一个基于该委托类型的事件 SimpleEvent。OnSimpleEvent 方法是触发事件的方法,它检查事件是否有注册的处理器,并按顺序调用它们。RaiseEvent 方法用于触发事件。EventSubscriber 类中的 Subscribe 方法用于订阅事件,并提供了事件处理器 EventHandler。在 Main 方法中,我们创建了 EventExample 和 EventSubscriber 的实例,并通过 Subscribe 方法将 EventHandler 注册到 SimpleEvent 上。最后通过 RaiseEvent 方法触发了事件,控制台上输出了 "Event triggered."。 

        

http://www.lryc.cn/news/403627.html

相关文章:

  • 一、单例模式
  • B树:高效的数据存储结构
  • [Vulnhub] TORMENT IRC+FTP+CUPS+SMTP+apache配置文件权限提升+pkexec权限提升
  • <数据集>安全帽佩戴识别数据集<目标检测>
  • [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-21 VTC视频时序控制器设计
  • 记录uni-app横屏项目:自定义弹出框
  • Linux Vim教程(二):基本命令和操作
  • 【大模型基础】4.1 数据挖掘(待)
  • Jupyter Notebook与机器学习:使用Scikit-Learn构建模型
  • IMU提升相机清晰度
  • 掌握SQL Server性能监控:自定义性能计数器的实现
  • jdk1.8 List集合Stream流式处理
  • leetcode位运算(1720. 解码异或后的数组)
  • Android 性能优化之卡顿优化
  • mac电脑显示隐藏文件
  • 深度学习之基础知识整理
  • R语言学习笔记9-数据过滤-分组-融合
  • GESP CCF C++ 八级认证真题 2024年6月
  • Spring Boot 单元测试什么时候需要添加 @RunWith
  • 鸿蒙OpenHarmony Native API【HiLog】
  • Pycharm 和虚拟环境的那些事?
  • rancher2里面的containerd的使用
  • Python数据风险案例54——人工智能热门概念股爬虫分析其价值(三因子模型)
  • 【HarmonyOS开发】Navigation使用
  • 计算机网络参考模型与5G协议
  • docker自建rustdesk-server远程桌面
  • 海外抖音黑屏是网络问题还是硬件问题?
  • 为了实现接口缓存,专门写了个缓存库 f-cache-memory
  • actual combat 35 —— es
  • android R ext4 image打包脚本介绍