在C#编程语言中,委托(Delegate)是一种强大的特性,它允许我们将方法作为参数传递给其他方法,或者存储和调用方法。本文将深入探讨C#中常见的三种委托类型:Func、Action和Predicate,以及它们在不同场景下的应用。 让我们详细了解Func委托。Func委托用于表示具有返回值的方法。Func的泛型参数列表定义了输入参数的类型和返回值的类型。例如: 1. `Func<TResult>` 用于表示没有输入参数但有返回值的方法,`TResult` 是返回类型。 2. `Func<T1, TResult>` 有一个输入参数 `T1` 和一个返回值 `TResult`。 3. `Func<T1, T2, TResult>` 包含两个输入参数 `T1` 和 `T2`,返回类型为 `TResult`。 4. `Func<T1, T2, T3, TResult>` 有三个输入参数 `T1`, `T2`, `T3`,返回类型为 `TResult`。 5. `Func<T1, T2, T3, T4, TResult>` 有四个输入参数 `T1`, `T2`, `T3`, `T4`,返回类型为 `TResult`。 以下是一些使用Func委托的例子: ```csharp // 使用Func<TResult> Func<string> func = () => "我是Func<TResult>委托出来的结果"; Console.WriteLine(func()); // 使用Func<T, TResult> Func<string, string> funcOne = s => s.ToUpper(); Console.WriteLine(funcOne("我是Func<T, TResult>委托出来的结果")); // 使用Func<T1, T2, TResult> Func<string, string, string> funcTwo = (value1, value2) => value1 + " " + value2; Console.WriteLine(funcTwo("我是", "Func<T1, T2, TResult>委托出来的结果")); ``` 接下来是Action委托,它与Func的区别在于Action没有返回值。Action的使用场景通常在需要执行一系列操作,但不需要关心返回结果的情况下。Action也有五种不同的泛型版本: 1. `Action` 表示无参数且无返回值的方法。 2. `Action<T1>` 有一个输入参数 `T1`,没有返回值。 3. `Action<T1, T2>` 包含两个输入参数 `T1` 和 `T2`,没有返回值。 4. `Action<T1, T2, T3>` 有三个输入参数 `T1`, `T2`, `T3`,没有返回值。 5. `Action<T1, T2, T3, T4>` 有四个输入参数 `T1`, `T2`, `T3`, `T4`,没有返回值。 Action在多线程和UI交互中非常有用,可以结合Lambda表达式轻松地实现线程间的通信。例如: ```csharp // 使用Action Action action = () => Console.WriteLine("这是Action委托无参数的例子"); // 使用Action<T1> Action<int> actionOne = num => Console.WriteLine($"这是Action<T1>委托,数字是:{num}"); actionOne(123); // 使用Action<T1, T2> Action<string, int> actionTwo = (msg, num) => Console.WriteLine($"{msg},数字是:{num}"); actionTwo("这是Action<T1, T2>", 456); ``` Predicate委托常用于需要对一组数据进行条件判断的情况。Predicate的定义是 `delegate bool Predicate<T>(T obj)`,它接受一个对象 `T` 作为参数并返回一个布尔值,表示是否满足某个条件。例如,筛选数组中的偶数: ```csharp int[] numbers = { 1, 2, 3, 4, 5, 6 }; Predicate<int> isEven = n => n % 2 == 0; var evenNumbers = numbers.Where(isEven); foreach (var number in evenNumbers) { Console.WriteLine(number); } ``` Func、Action和Predicate是C#中常用的委托类型,分别用于处理有返回值、无返回值和条件判断的方法。它们增强了代码的灵活性和可读性,使得在设计模式如策略模式、事件处理和LINQ查询中更加便捷。理解和熟练使用这些委托对于提升C#编程能力至关重要。
剩余12页未读,继续阅读
- 粉丝: 4
- 资源: 914
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Windows检查电池健康度的批处理脚本实现
- 用HTML5和JavaScript实现动态过年鞭炮场景
- 快速排序在Go中的高效实现与应用
- 对象检测23-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 云原生-k8s知识学习-CKA考前培训
- Python实现HTML压缩功能
- 完结26章Java主流分布式解决方案多场景设计与实战
- ECSHOP模板堂最新2017仿E宠物模板 整合ECTouch微分销商城
- Pear Admin 是 一 款 开 箱 即 用 的 前 端 开 发 模 板,提供便捷快速的开发方式,延续 Admin 的设计规范
- 51单片机仿真摇号抽奖机源程序12864液晶显示仿真+程序