委托

委托就是"方法的容器",可以把方法当作变量一样传递、赋值、调用。

方法作为参数 – 把一个方法传给另一个方法(回调)

解耦 – 调用者不需要知道具体执行什么,只需要知道委托签名

灵活扩展 – 运行时动态决定执行哪个方法

————————————————————————————————————————————————————————————

案例1:最简单的委托(打招呼)
csharp
delegate void GreetDelegate(string name); // 1.声明委托

class Program
{
static void SayEnglish(string name) { Console.WriteLine($"Hello, {name}"); }
static void SayChinese(string name) { Console.WriteLine($"你好,{name}"); }

static void Main()
{
GreetDelegate greet; // 2.声明委托变量
greet = SayEnglish; // 3.指向英文方法
greet("Tom"); // 4.调用 → Hello, Tom

greet = SayChinese; // 换个方法
greet("小明"); // 你好,小明
}
}
同一个委托变量greet,可以指向不同方法,执行不同的逻辑。

————————————————————————————————————————————————————————————

案例2:委托作为参数(回调机制)
csharp
delegate int CalcDelegate(int a, int b);

class Program
{
static int Add(int a, int b) { return a + b; }
static int Mul(int a, int b) { return a * b; }

static void PrintResult(int x, int y, CalcDelegate calc)
{
int result = calc(x, y); // 执行传入的方法
Console.WriteLine($"结果是:{result}");
}

static void Main()
{
PrintResult(3, 4, Add); // 传入加法 → 结果是:7
PrintResult(3, 4, Mul); // 传入乘法 → 结果是:12
}
}
PrintResult方法接收一个委托参数,具体怎么算由调用者决定,非常灵活。

————————————————————————————————————————————————————————————

案例3:多播委托(一个委托执行多个方法)
csharp
delegate void NotifyDelegate(string msg);

class Program
{
static void SendEmail(string msg) { Console.WriteLine($"发邮件:{msg}"); }
static void SendSMS(string msg) { Console.WriteLine($"发短信:{msg}"); }
static void SendWeChat(string msg) { Console.WriteLine($"发微信:{msg}"); }

static void Main()
{
NotifyDelegate notify = SendEmail; // 先指向邮件
notify += SendSMS; // 再加短信
notify += SendWeChat; // 再加微信

notify("系统升级通知"); // 三个方法依次执行!
// 发邮件:系统升级通知
// 发短信:系统升级通知
// 发微信:系统升级通知
}
}
一个委托变量可以同时指向多个方法,调用一次,所有方法依次执行(常用在事件中)。

posted @ 2026-08-07 22:50  菜鸟的奋斗军  阅读(3)  评论(0)    收藏  举报