【C#基础知识 17】8. 委托和事件

8. 委托和事件

8.1 委托 (Delegate)

委托 是一种类型安全的函数指针,它允许将方法作为参数传递给其他方法。委托可以用来定义回调方法。

基本概念
  • 声明委托:使用 delegate 关键字声明委托类型。
  • 实例化委托:可以将一个或多个方法绑定到委托实例。
  • 调用委托:通过委托实例调用绑定的方法。
代码示例

csharp

using System;

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

public class Program
{
    // 定义一个与委托签名匹配的方法
    public static void SayHello(string message)
    {
        Console.WriteLine("Hello, " + message);
    }

    public static void SayGoodbye(string message)
    {
        Console.WriteLine("Goodbye, " + message);
    }

    public static void Main()
    {
        // 实例化委托并将方法绑定到委托实例
        MyDelegate myDelegate = new MyDelegate(SayHello);
        myDelegate += SayGoodbye; // 绑定另一个方法

        // 调用委托
        myDelegate("World");
    }
}

输出:


Hello, World
Goodbye, World
8.2 事件 (Event)

事件 是一种特殊的委托,用于实现发布-订阅模式。事件通常用于类与类之间的通信。

基本概念
  • 声明事件:使用 event 关键字声明事件。
  • 触发事件:使用 event 关键字声明的委托实例来触发事件。
  • 订阅事件:使用 += 运算符订阅事件。
  • 取消订阅事件:使用 -= 运算符取消订阅事件。
代码示例

csharp

using System;

// 声明一个委托类型
public delegate void MyEventHandler(string message);

public class Publisher
{
    // 声明一个事件
    public event MyEventHandler MyEvent;

    // 触发事件的方法
    public void TriggerEvent(string message)
    {
        MyEvent?.Invoke(message); // 使用 ?. 避免空引用异常
    }
}

public class Subscriber
{
    // 定义一个与委托签名匹配的方法
    public void OnMyEvent(string message)
    {
        Console.WriteLine("Subscriber received: " + message);
    }
}

public class Program
{
    public static void Main()
    {
        Publisher publisher = new Publisher();
        Subscriber subscriber = new Subscriber();

        // 订阅事件
        publisher.MyEvent += subscriber.OnMyEvent;

        // 触发事件
        publisher.TriggerEvent("Hello, World!");

        // 取消订阅事件
        publisher.MyEvent -= subscriber.OnMyEvent;

        // 再次触发事件,观察是否收到消息
        publisher.TriggerEvent("This will not be received.");
    }
}

输出:


Subscriber received: Hello, World!

总结

  • 委托 是一种类型安全的函数指针,可以将方法作为参数传递。
  • 事件 是一种特殊的委托,用于实现类与类之间的通信,通常用于发布-订阅模式。
  • 通过委托和事件,可以实现松耦合的设计,提高代码的可维护性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

路飞VS草帽

感谢支持~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值