Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# 事件与委托使用场景

作者:我在坚强也需要有人疼   发布日期:2025-03-08   浏览:311

using System;

namespace EventAndDelegateExample
{
    // 定义一个委托类型,它表示一个无参数且返回 void 的方法。
    public delegate void NotifyHandler();

    // 定义一个发布者类,它包含事件。
    public class Publisher
    {
        // 声明一个事件,使用上面定义的委托类型。
        public event NotifyHandler NotifyEvent;

        // 触发事件的方法。
        public void TriggerEvent()
        {
            Console.WriteLine("Publisher: Triggering the event.");
            // 检查是否有订阅者注册了该事件。
            if (NotifyEvent != null)
            {
                NotifyEvent();  // 调用所有订阅者的回调方法。
            }
        }
    }

    // 定义一个订阅者类,它将处理事件。
    public class Subscriber
    {
        private string _name;

        public Subscriber(string name, Publisher publisher)
        {
            _name = name;
            // 订阅 Publisher 类的事件。
            publisher.NotifyEvent += HandleNotification;
        }

        // 处理事件的方法。
        private void HandleNotification()
        {
            Console.WriteLine($"Subscriber {_name}: Received notification.");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // 创建 Publisher 实例。
            Publisher publisher = new Publisher();

            // 创建多个 Subscriber 实例,并订阅 Publisher 的事件。
            Subscriber subscriber1 = new Subscriber("One", publisher);
            Subscriber subscriber2 = new Subscriber("Two", publisher);

            // 触发事件。
            publisher.TriggerEvent();
        }
    }
}

解释说明:

  1. 委托(Delegate)

    • public delegate void NotifyHandler(); 定义了一个名为 NotifyHandler 的委托类型,它表示一个无参数且返回 void 的方法。委托是 C# 中的一种类型安全的函数指针,用于引用具有相同签名的方法。
  2. 事件(Event)

    • public event NotifyHandler NotifyEvent;Publisher 类中声明了一个事件 NotifyEvent,该事件使用前面定义的委托类型 NotifyHandler。事件是一种特殊的委托,用于在对象之间传递通知。
  3. 发布者(Publisher)

    • Publisher 类包含一个事件 NotifyEvent 和一个触发事件的方法 TriggerEvent。当调用 TriggerEvent 方法时,会检查是否有订阅者注册了该事件,并调用所有订阅者的回调方法。
  4. 订阅者(Subscriber)

    • Subscriber 类在构造函数中订阅了 Publisher 类的事件,并定义了一个处理事件的方法 HandleNotification。每当 Publisher 触发事件时,所有订阅者的 HandleNotification 方法都会被调用。
  5. 主程序(Program)

    • Main 方法中,创建了一个 Publisher 实例和两个 Subscriber 实例。然后调用 PublisherTriggerEvent 方法来触发事件,所有订阅者都会收到通知并执行相应的处理逻辑。

通过这个示例,你可以看到如何使用委托和事件来实现发布-订阅模式,从而实现对象之间的解耦和通信。

上一篇:c#格式化字符串

下一篇:c#获取路径中的文件名

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

.net和c#

c#游戏开发

c#网络编程

c# rectangle

c# if else

c# rtsp

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站