C# 中的事件

1.事件的概念

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

2.示例代码

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

cs 复制代码
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."。

相关推荐
一晌小贪欢13 小时前
PyQt5 开发一个 PDF 批量合并工具
开发语言·qt·pdf
神仙别闹13 小时前
基于 MATLAB 实现的图像信号处理
开发语言·matlab·信号处理
swift1922113 小时前
Qt多语言问题 —— 静态成员变量
开发语言·c++·qt
それども14 小时前
Spring Bean @Autowired自注入空指针问题
java·开发语言·spring
沐知全栈开发14 小时前
JavaScript for 循环
开发语言
星空椰14 小时前
JavaScript 基础入门:从零开始掌握变量与数据类型
开发语言·前端·javascript·ecmascript
ulias21214 小时前
Linux中的开发工具
linux·运维·服务器·开发语言·c++·windows
大空大地202614 小时前
Windows打印技术和网络编程技术
c#
geovindu14 小时前
go: Model,Interface,DAL ,Factory,BLL using mysql
开发语言·mysql·设计模式·golang·软件构建
XiYang-DING14 小时前
【Java】反射
java·开发语言