一、委托(Delegate):方法的类型化引用
1.1 委托的本质解析
// 1. 定义委托类型(方法签名模板)
public delegate void LogHandler(string message);
// 2. 声明委托实例
LogHandler logger;
// 3. 绑定具体方法
logger = Console.WriteLine;
// 4. 调用委托
logger("Hello Delegate!");
委托核心特性:
-
类型安全:严格匹配方法签名
-
多播能力:支持链式调用多个方法
-
异步支持:BeginInvoke/EndInvoke模式
1.2 委托演进史
// C# 1.0:基础委托
delegate int Calculator(int x, int y);
// C# 2.0:匿名方法
Calculator add = delegate(int a, int b) { return a + b; };
// C# 3.0:Lambda表达式
Calculator multiply = (a, b) => a * b;
// C# 9.0:静态匿名函数
var power = static (int x, int y) => Math.Pow(x, y);
二、泛型委托:Action与Func
2.1 Action委托家族
定义 | 等效委托 | 典型应用场景 |
---|---|---|
Action |
delegate void D() |
无参数无返回值操作 |
Action<T1> |
delegate void D(T1) |
单参数操作 |
Action<T1,T2> |
delegate void D(T1,T2) |
多参数操作 |
// 文件操作日志记录
Action<string> logAction = message =>
File.AppendAllText("app.log", $"{DateTime.Now}: {message}");
logAction("系统启动");
2.2 Func委托家族
定义 | 等效委托 | 典型应用场景 |
---|