C#委托事件的实现

1、事件

在C#中事件是一种特殊的委托类型,用于在对象之间提供一种基于观察者模式的通知机制。

1.1、事件的发送方定义了一个委托,委托类型的声明包含了事件的签名,即事件处理器方法的签名。

1.2、事件的订阅者可以通过+=运算符来注册事件处理器。

1.3、当事件发送方触发事件时,所有注册的事件处理器会被依次调用。

2、委托事件的实现

2.1、事件发布类

csharp 复制代码
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、事件订阅类

csharp 复制代码
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、委托事件的实现

csharp 复制代码
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、运行效果

相关推荐
secondyoung13 小时前
Markdown转换为Word:Pandoc模板使用指南
开发语言·经验分享·笔记·c#·编辑器·word·markdown
andyguo18 小时前
AI模型测评平台工程化实战十二讲(第五讲:大模型测评分享功能:安全、高效的结果展示与协作)
人工智能·安全·c#
大飞pkz21 小时前
【设计模式】访问者模式
开发语言·设计模式·c#·访问者模式
LateFrames1 天前
用 【C# + Winform + MediaPipe】 实现人脸468点识别
python·c#·.net·mediapipe
R-G-B2 天前
【14】C#实战篇——C++动态库dll 接口函数将char* strErr字符串 传给C# ,并且在winform的MessageBox和listbox中显示。C++ string 日志传给 C#
c++·c#·strerr字符串传给c#·动态库dll传递字符串给c#·string日志传给c#·c++ string传给 c#·c++底层函数日志传给c#显示
我是唐青枫2 天前
深入掌握 FluentMigrator:C#.NET 数据库迁移框架详解
数据库·c#·.net
tiankongdeyige2 天前
Unity学习之C#的反射机制
学习·unity·c#
绿荫阿广2 天前
用纯.NET开发并制作一个智能桌面机器人(六):使用.NET开发一个跨平台功能完善的小智AI客户端
c#·.net·asp.net core·maui·winui
周杰伦fans2 天前
c#设计模式—访问者模式
c#·.net
疯狂的Alex2 天前
【C#避坑实战系列文章15】C# WinForm 上位机开发:解决串口粘包+LiveCharts卡顿+InfluxDB存储(免费代码+仿真工具)
sqlite·c#·上位机·串口通信·livechars·c#硬件对接