浅谈C# 委托与事件

一、基本介绍
        委托(Delegate)是一种特殊的类型,它定义了方法的类型,使得可以将方法作为参数传递。事件(Event)是基于委托的一种特殊用途,用于实现事件驱动的编程模型。

委托
委托可以看作是对方法的一种引用,它允许你将方法作为参数传递给其他方法。委托可以指向任何返回类型和参数列表与委托类型匹配的方法。

委托的声明
public delegate int Operation(int x, int y); // 声明一个委托,用于执行加法操作
委托的实例化和使用
public class Program
{
    public static void Main()
    {
        Operation op = new Operation(Add); // 实例化委托
        int result = op(5, 3); // 调用方法
        Console.WriteLine("结果是:{0}", result);
 
        op = new Operation(Subtract); // 改变委托引用的方法
        result = op(5, 3);
        Console.WriteLine("结果是:{0}", result);
    }
 
    public static int Add(int x, int y)
    {
        return x + y;
    }
 
    public static int Subtract(int x, int y)
    {
        return x - y;
    }
}

事件
事件是一种特殊的多播委托,用于在对象间发布和订阅消息。事件的发布者(发布事件的对象)和订阅者(对事件感兴趣的对象)通过事件进行通信。

事件的声明
public class Publisher
{
    public event EventHandler OnChange; // 声明事件
 
    protected virtual void OnChangeEventHandler(EventArgs e)
    {
        OnChange?.Invoke(this, e);
    }
 
    public void Change()
    {
        // 触发事件
        OnChangeEventHandler(new EventArgs());
    }
}
事件的订阅和取消订阅
public class Subscriber
{
    public void Subscribe(Publisher publisher)
    {
        publisher.OnChange += OnChangeHandler; // 订阅事件
    }
 
    public void Unsubscribe(Publisher publisher)
    {
        publisher.OnChange -= OnChangeHandler; // 取消订阅事件
    }
 
    private void OnChangeHandler(object sender, EventArgs e)
    {
        Console.WriteLine("事件被触发!");
    }
}

使用事件
public class Program
{
    public static void Main()
    {
        Publisher publisher = new Publisher();
        Subscriber subscriber = new Subscriber();
 
        subscriber.Subscribe(publisher); // 订阅事件
        publisher.Change(); // 触发事件
 
        subscriber.Unsubscribe(publisher); // 取消订阅
        publisher.Change(); // 再次触发事件,但不会有输出
    }

————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
                        
原文链接:https://blog.youkuaiyun.com/a876106354/article/details/141818888

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值