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

c#事件和委托的区别

作者:佳凝皓月   发布日期:2025-09-18   浏览:46

// 定义一个委托类型
public delegate void MyDelegate(string message);

// 定义一个事件,使用上面定义的委托类型
public class Publisher
{
    // 事件
    public event MyDelegate MyEvent;

    // 触发事件的方法
    public void TriggerEvent()
    {
        if (MyEvent != null)
        {
            MyEvent("事件被触发了!");
        }
    }
}

// 订阅事件的类
public class Subscriber
{
    private Publisher _publisher;

    public Subscriber(Publisher publisher)
    {
        _publisher = publisher;
        // 订阅事件
        _publisher.MyEvent += HandleMyEvent;
    }

    // 事件处理方法
    private void HandleMyEvent(string message)
    {
        Console.WriteLine($"接收到的消息: {message}");
    }
}

// 测试代码
public class Program
{
    public static void Main()
    {
        Publisher publisher = new Publisher();
        Subscriber subscriber = new Subscriber(publisher);

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

解释说明:

  1. 委托(Delegate):委托是一种类型安全的函数指针,它可以引用一个或多个方法。在上面的例子中,MyDelegate 是一个委托类型,它定义了一个签名,可以引用返回类型为 void 并接受一个 string 参数的方法。

  2. 事件(Event):事件是基于委托的一种特殊用途,用于实现发布-订阅模式。在例子中,Publisher 类中的 MyEvent 是一个事件,它使用了 MyDelegate 委托类型。只有 Publisher 类内部可以触发事件,而外部类可以通过订阅该事件来接收通知。

  3. 触发事件TriggerEvent 方法用于触发事件。它检查是否有订阅者(即 MyEvent != null),如果有,则调用所有订阅者的处理方法。

  4. 订阅事件Subscriber 类通过构造函数订阅了 PublisherMyEvent 事件,并提供了 HandleMyEvent 方法作为事件处理程序。

  5. 测试代码:在 Main 方法中,创建了 PublisherSubscriber 实例,并调用了 TriggerEvent 方法来触发事件,从而输出消息到控制台。

上一篇:c# 判断字符串是否为空

下一篇:c#treeview

大家都在看

c# 二进制

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

c#网络编程

c# rectangle

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

Laravel 中文站