委托
委托就是"方法的容器",可以把方法当作变量一样传递、赋值、调用。
方法作为参数 – 把一个方法传给另一个方法(回调)
解耦 – 调用者不需要知道具体执行什么,只需要知道委托签名
灵活扩展 – 运行时动态决定执行哪个方法
————————————————————————————————————————————————————————————
案例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("系统升级通知"); // 三个方法依次执行!
// 发邮件:系统升级通知
// 发短信:系统升级通知
// 发微信:系统升级通知
}
}
一个委托变量可以同时指向多个方法,调用一次,所有方法依次执行(常用在事件中)。

浙公网安备 33010602011771号