C# 委托(一个方法的形参,是另一个方法,lambda表达式) 作者:马育民 • 2025-03-23 22:06 • 阅读:10007 # 介绍 委托是C#中的一种类型,允许将方法作为参数传递给其他方法,实现回调、事件处理和动态调用等功能。 官方网址: https://learn.microsoft.com/zh-cn/dotnet/csharp/programming-guide/delegates/ ### 一句话解释 相当于 JavaScript 的回调函数 # 例子 由于写法比较与众不同,所以这里用简单例子说明写法、用法,没有实际意义 ### 声明委托类型(在类的内部、外部声明都行) ``` public delegate void StdDel(); ``` ### 定义委托方法1 在类内部定义 **关键:**委托方法的 **形参**、**返回值** 必须与委托类型相同 ``` public static void Std() { Console.WriteLine("学习委托1"); } ``` ### 实例化委托 实例化委托,传入 `Std`,不带 `()` ``` static void Main(string[] args) { StdDel del = new StdDel(Std);// 实例化委托,传入std } ``` # 使用委托方式1 使用委托对象调用方法 ``` static void Main(string[] args) { StdDel del = new StdDel(Std);// 实例化委托,传入std del(); // 使用委托对象调用方法 Console.ReadKey(); } ``` # 委托的多播(Multicasting of a Delegate) 委托对象可使用 `+` 运算符进行合并,这被称为委托的 **多播(multicasting)**,也叫组播。 **注意:**只有相同类型的委托可被合并。 ### 应用场景 调用委托时,可以执行多个方法 # 合并委托例子 ### 定义委托方法2 在类内部定义 **关键:**委托方法的 **形参**、**返回值** 必须与委托类型相同 ``` public static void Std2() { Console.WriteLine("学习委托2"); } ``` ### 执行 使用委托对象调用方法 ``` static void Main(string[] args) { StdDel del = new StdDel(Std);// 实例化委托,传入std del += Std2 del(); // 使用委托对象调用方法Std()、Std2() Console.ReadKey(); } ``` # 移除委托 委托对象可使用 `-` 运算符可用于从合并的委托中移除组件委托 ### 例子 ``` static void Main(string[] args) { StdDel del = new StdDel(Std);// 实例化委托,传入std del += Std2 del(); // 使用委托对象调用方法Std()、Std2() del -= Std2 // 移除 Std2 del(); // 使用委托对象调用方法Std() Console.ReadKey(); } ``` # 使用委托方式2 委托作为参数,传入另一个函数 ### 定义执行函数 在类内部定义 **关键:** **形参** 是上面声明的 **委托类型** ``` public static void Test(StdDel del) { del();// 执行委托 } ``` ### 执行 调用 `Test()` 方法,传入 **委托实例** ``` static void Main(string[] args) { StdDel sd = new StdDel(Std);// 实例化委托,传入std Test(sd); // 委托作为参数,传入另一个函数 Console.ReadKey(); } ``` # 使用委托方式3 委托方法作为参数,传入另一个函数(**不需要实例化委托**) ### 执行 ``` static void Main(string[] args) { Test(Std);// 执行时,将委托方法作为参数传进去 Console.ReadKey(); } ``` # 匿名委托 详见: https://www.malaoshi.top/show_1GWjLNYvhaS.html # lambda表达式 详见: https://www.malaoshi.top/show_1GWjLNYvhaS.html https://blog.csdn.net/COCO56/article/details/103644594 原文出处:http://malaoshi.top/show_1GWoVMw3ivP.html