摘要:首先是普通委托,它允许将一个与委托签名匹配的方法作为参数传递。例如定义 delegate int MathOp(int a, int b); ,就可以把 Add 函数( int Add(int num1, int num2) { return num1 + n
在.NET 编程世界里,委托是一种极为关键的类型,它如同桥梁,连接着方法与调用者,实现灵活的方法传递与执行。
首先是普通委托,它允许将一个与委托签名匹配的方法作为参数传递。例如定义 delegate int MathOp(int a, int b); ,就可以把 Add 函数( int Add(int num1, int num2) { return num1 + num2; } )或 Subtract 函数等符合 int(int, int) 签名的方法赋值给 MathOp 委托变量,通过委托变量调用这些方法,实现类似函数指针功能,方便代码解耦与复用,常用于简单回调场景。
匿名委托则更具灵活性,无需显式定义具名委托类型。如 MathOp anonDelegate = delegate(int x, int y) { return x * y; }; ,在需要临时定义一个仅使用一次的方法逻辑时,匿名委托大显身手,它能就地创建方法体,缩短代码开发周期,不过匿名委托在复杂代码结构中过多使用会降低可读性。
随着异步编程需求增长,事件委托登场。在 Windows Forms 或 WPF 开发中,按钮点击事件 button.Click += new EventHandler(Button_Clicked); ,这里 EventHandler 就是事件委托类型,它定义了事件触发时调用方法的签名规范,连接着界面交互(如按钮点击)与背后处理逻辑,使得程序能响应外界动态操作,构建交互式应用,广泛应用于 GUI 编程。
泛型委托以 Action 和 Func 系列为代表, Action 用于封装无返回值的方法,像 Action printAction = Console.WriteLine; ;Func 侧重有返回值的,如 Func addFunc = (a, b) => a + b; 。它们借助泛型参数适应不同参数数量与返回值要求,极大简化委托使用,减少自定义委托类型声明,在 LINQ 表达式、异步任务处理里频繁现身,提升代码简洁度。
.NET 多样委托形式为开发者提供丰富编程手段,适配从基础方法调用、事件驱动到复杂异步流程场景,熟练驾驭委托,能将复杂功能拆解,以灵动代码架构高效应对多变业务需求。
来源:opendotnet