委托和事件

委托和事件(Delegate & Event)

委托(delegate)是 C# 中的类型安全的函数指针,事件(event)是基于委托的发布-订阅机制。

委托

// 声明委托类型
public delegate int MathOp(int a, int b);

// 使用
MathOp add = (a, b) => a + b;
MathOp sub = (a, b) => a - b;
Console.WriteLine(add(3, 4));   // 7

// 多播委托
MathOp op = add;
op += sub;
// 多播委托返回值取最后一个方法的返回值

事件

public class Button
{
    // 声明事件
    public event EventHandler? Clicked;

    public void Click()
    {
        Clicked?.Invoke(this, EventArgs.Empty);
    }
}

// 订阅
var btn = new Button();
btn.Clicked += (s, e) => Console.WriteLine("Button clicked!");
btn.Click();

内置委托

Action<T>     // 无返回值委托
Func<T, R>    // 有返回值委托
Predicate<T>  // 返回 bool 的委托

事件 vs 委托

  • 事件只能在声明它的类内部 Invoke,外部只能 += / -=
  • 委托可以在外部任意调用
  • 事件是"通知",委托是"回调"

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录