c#中的委托
委托:delegate
本质就是个密封类,与类平级
用于封装,解耦
声明语法
// 使用 delegate 关键字声明一个委托 delegate void Func(int x);
简单使用
eg.一个计算器
namespace ConsoleApp; class Program { /** * 声明委托 */ public delegate double CalculateFunction(double x, double y); /** * 加法 */ static double Add(double x, double y) { return x + y; } /** * 减法 */ static double Subtract(double x, double y) { return x - y; } // Test方法的参数就是一个方法(委托) static void Test(CalculateFunction calculateFunction) { Console.Write("请输入x的值:"); double x = Convert.ToDouble(Console.ReadLine()); Console.Write("请输入y的值:"); double y = Convert.ToDouble(Console.ReadLine()); double result = calculateFunction(x, y); Console.WriteLine($"x与y委托计算的结果>>>{result}"); } static void Main(string[] args) { // 写法一: // CalculateFunction cal = new CalculateFunction(Add); // double d = cal(3, 4); // 写法二: // Test(new CalculateFunction(Add)); // 写法三: Test(Add); Test(Subtract); Console.ReadKey(); } }
常用方法
对委托最常使用的方法是 Invoke()
和 BeginInvoke()
/ EndInvoke()
。
Invoke()
会调用已附加到特定委托实例的所有方法。
eg.简单使用 +=、-=、Invoke()
namespace ConsoleApp; class Program { public delegate double CalculateFunction(double x, double y); public static CalculateFunction calFunc; static double Add(double x, double y) => x + y; static double Test2(double x, double y) { Console.WriteLine($"委托实现 Add >_<"); return Add(x, y); } static void Main(string[] args) { // 实例化委托(订阅) calFunc += Test2; // 取消订阅 // calFunc -= Test2; // 调用委托 calFunc?.Invoke(11, 22); } }
与接口对比
接口实现了类的依赖注入
委托实现了方法的依赖注入
本文作者:Ritchie
本文链接:https://www.cnblogs.com/wang-zeyu/p/18574667
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步