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."。 

        

相关推荐

  1. c#事件

    2024-07-21 11:28:04       30 阅读
  2. c#事件

    2024-07-21 11:28:04       27 阅读
  3. C# 事件

    2024-07-21 11:28:04       23 阅读
  4. 深入理解C#事件驱动编程

    2024-07-21 11:28:04       47 阅读
  5. 深入理解 C# Unity 事件和委托

    2024-07-21 11:28:04       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-21 11:28:04       101 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-21 11:28:04       109 阅读
  3. 在Django里面运行非项目文件

    2024-07-21 11:28:04       87 阅读
  4. Python语言-面向对象

    2024-07-21 11:28:04       96 阅读

热门阅读

  1. 【分布式存储系统HDFS】架构和使用

    2024-07-21 11:28:04       22 阅读
  2. sugarhosts优惠码,国外免备案建站解决方案!

    2024-07-21 11:28:04       18 阅读
  3. SparseArray 你不知道的东西

    2024-07-21 11:28:04       19 阅读
  4. Python面试题:Python中的记忆化与缓存技术

    2024-07-21 11:28:04       26 阅读
  5. nginx的配置

    2024-07-21 11:28:04       19 阅读
  6. Choosing The Commander

    2024-07-21 11:28:04       23 阅读
  7. 测试人员如何进行需求分析

    2024-07-21 11:28:04       22 阅读
  8. 设计模式--模板方法

    2024-07-21 11:28:04       24 阅读
  9. 使用winget安装git

    2024-07-21 11:28:04       24 阅读
  10. [C/C++入门][for]22、输出奇偶数之和

    2024-07-21 11:28:04       25 阅读
  11. 科普文:CodeReview小结

    2024-07-21 11:28:04       23 阅读