17.1 委托概念
委托是类型安全的方法指针,允许将方法作为参数传递。
声明委托
1 | // 委托声明 |
17.2 Action 与 Func
Action(无返回值)
1 | // Action 无参数 |
Func(有返回值)
1 | // Func<TResult> 无参数 |
17.3 多播委托
1 | Action<string> log = msg => Console.WriteLine($"Log: {msg}"); |
17.4 事件
定义事件
1 | public class Button |
自定义事件参数
1 | public class TemperatureChangedEventArgs : EventArgs |
17.5 事件最佳实践
1. 使用 EventHandler
1 | // 推荐 |
2. 空条件运算符
1 | // 安全触发 |
3. 事件访问器
1 | private EventHandler _myEvent; |
17.6 本章小结
- 委托是类型安全的方法指针
Action无返回值,Func有返回值- 多播委托可组合多个方法
- 事件基于委托,提供发布/订阅模式
- 使用
EventHandler<T>定义事件 - 使用
?.Invoke安全触发事件
练习题
- 使用
Func实现计算器 - 创建
Timer类,每秒触发事件 - 使用多播委托实现日志记录
- 以下代码输出什么?
1
2
3Action a = () => Console.WriteLine("A");
a += () => Console.WriteLine("B");
a();