委托与事件
委托(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("系统", "事件触发!");
}
}