委托与事件

C# 教程 · 第 6 章 · 6 次浏览

委托(delegate)是 C# 的函数指针:把方法当作参数传递。事件(event)是基于委托的发布订阅机制,按钮点击、状态变化都靠它。

委托

delegate int Calc(int a, int b); 声明委托类型,然后可以赋方法、匿名函数、lambda。

内置委托

Func<T, R>(有返回值)、Action<T>(无返回值),不用自己声明。

事件

event 关键字定义事件,用 += 订阅(监听)、-= 取消。标准模式:event EventHandler 带 sender 和 EventArgs。

代码示例

using System;

class Program {
    // 委托
    delegate int Calc(int a, int b);

    // 事件
    static event EventHandler<string> OnMessage;

    static int Add(int a, int b) => a + b;

    static void Main() {
        // 委托使用
        Calc calc = Add;
        Console.WriteLine(calc(3, 4));

        // lambda 委托
        Calc mul = (a, b) => a * b;
        Console.WriteLine(mul(3, 4));

        // Func / Action 内置
        Func<int, int> square = n => n * n;
        Action<string> print = s => Console.WriteLine(s);
        print($"平方: {square(6)}");

        // 事件
        OnMessage += (s, msg) => Console.WriteLine($"[{s}] {msg}");
        OnMessage?.Invoke("系统", "事件触发!");
    }
}