浅谈C#中Action和Func回调的常用方式

下面是详细讲解“浅谈C#中 Action 和 Func 回调的常用方式” 的完整攻略。

什么是回调函数

回调函数是一种常见的程序设计模式,用于将一个函数作为参数传递给另一个函数。在调用这个另一个函数时,它将执行传递的函数作为一部分操作。这种方法被称为“回调”功能。

C# 中的回调

C# 中的回调是通过委托实现的。一个委托是一个类型,它持有对一个或多个方法的引用。委托中的方法可以是 static、non-static 或 lambda 表达式。委托是 C# 中的“可调用对象”,它们可以像方法一样被调用并执行其关联的方法。

Action 委托

Action 是一个预定义的委托类型,它没有返回值。它可以用来引用没有参数和没有返回值的方法。

Action 委托的声明

public delegate void Action();

Action 委托的使用

示例 1

假设我们有一个方法 SendMessage,用于向服务器发送消息,而我们想在这个方法之前和之后执行某些代码。我们可以使用如下代码进行操作:

Action before = () => Console.WriteLine("Before sending message.");
Action after = () => Console.WriteLine("After sending message.");

SendMessage(before, after);

private static void SendMessage(Action before, Action after)
{
    before?.Invoke();

    // Send message

    after?.Invoke();
}

这里我们通过把委托传递给 SendMessage 方法来实现回调功能。在方法执行之前和之后,分别调用了我们传递的两个委托。

示例 2

假设我们需要对一个列表中的每个元素执行同一个方法 DoSomething。我们可以使用如下代码:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

Action<int> action = n => Console.WriteLine($"The square of {n} is {n * n}");

numbers.ForEach(action);

这里我们需要使用 Action<int> 委托,它有一个整数类型的参数,并且没有返回值。我们将一个 lambda 表达式赋值给 action 变量,然后将其传递给列表的 ForEach 方法。ForEach 方法将列表中的每个元素作为参数传递给 lambda 表达式,最终将其输出到控制台。

Func 委托

Func 是 C# 中另一个预定义的委托类型,它具有一个返回值和一个或多个参数。在 Func 中的最后一个参数是返回值类型,其余的参数是输入参数。

Func 委托的声明

public delegate TResult Func<in T, out TResult>(T arg);

Func 委托的使用

示例 1

假设我们有一个方法 Add,它可以将两个数字相加并返回结果。我们可以使用如下代码进行操作:

Func<int, int, int> add = (a, b) => a + b;

int result = add(1, 2);

这里我们使用 Func<int, int, int> 委托来调用 Add 方法,它有两个整数类型的参数,并返回一个整数类型的结果。我们将一个 lambda 表达式赋值给 add 变量,并将其传递给方法。最后,我们将它的结果保存在一个变量中。

示例 2

假设我们需要找到一个列表中的最大值。我们可以使用如下代码:

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

Func<int, int, int> max = (a, b) => a > b ? a : b;

int maxNumber = numbers.Aggregate(max);

这里我们使用 Func<int, int, int> 委托来调用 Aggregate 方法,它需要一个 lambda 表达式作为参数。传递给 Aggregate 方法的委托有两个整数类型的参数,并返回一个整数类型的结果。该方法将在列表中对两个元素执行该委托,返回结果后在列表中继续执行该方法,直到返回最终结果。在这个例子中,我们使用了一个 lambda 表达式来比较两个数字,找到列表中的最大值。

小结

这篇文章讨论了 C# 中的回调函数,介绍了 Action 和 Func 委托类型的使用和声明,提供了使用这些委托类型的示例。使用回调可以让我们在程序中更好地控制流程,而委托则是实现回调的常见方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈C#中Action和Func回调的常用方式 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • C# 获取动态key的json对象的值案例

    下面我来详细讲解一下“C# 获取动态key的json对象的值案例”的完整攻略。 1.前言 在C#开发过程中,我们经常需要从json数据中获取特定的值。但是在实际开发中,json数据中包含的key是动态的,无法提前确定。这时我们需要一种能够灵活处理动态key的方法。 2.解决方案 2.1 使用Newtonsoft.Json库 我们可以使用Newtonsoft.…

    C# 2023年5月31日
    00
  • 协定需要会话,但是绑定“BasicHttpBinding”不支持它或者因配置不正确而无法支持它

    “协定需要会话,但是绑定“BasicHttpBinding”不支持它或者因配置不正确而无法支持它”的解决方法 在使用WCF服务时,有时会遇到“协定需要会话,但是绑定“BasicHttpBinding”不支持它或者因配置不正确而无法支持它”的错误。这个错误通常是由于绑定配置不正确或未启用会话支持导致的。在本文中,我们将提供一些解决方案来解决这个问题,并提供两个…

    C# 2023年5月15日
    00
  • .NET Core API之格式化输出对象OutputFormatter

    当我们在开发.NET Core API时,有时候需要在API返回结果中自定义格式,比如JSON格式化、XML格式化或者自定义格式化等。这时我们可以使用OutputFormatter来自定义输出格式,本文将详细讲解OutputFormatter的使用方法。 什么是OutputFormatter OutputFormatter是.NET Core框架中提供的一个…

    C# 2023年5月31日
    00
  • 详解C#中检查null的语法糖

    下面是详解C#中检查null的语法糖的完整攻略。 什么是语法糖 在C#中,语法糖简单地说就是一些语法上的便利,它不会引入新的语法规则,但是可以让开发者的编写更加方便和简洁。 C#中检查null的语法糖 在C# 6.0中,新增了Null 条件运算符 ?. 和空合并运算符 ??,使用起来非常方便。下面分别介绍这两个运算符如何使用及其优势。 ?. 运算符 先来看一…

    C# 2023年5月15日
    00
  • C#设计模式之Mediator中介者模式解决程序员的七夕缘分问题示例

    我们来详细讲解一下“C#设计模式之Mediator中介者模式解决程序员的七夕缘分问题示例”的攻略。 1. Mediator中介者模式 在软件设计中,Mediator中介者模式是一种行为型设计模式,旨在减小对象间的耦合度,它是通过将一个系统的多个对象之间的通信封装到一个中介者对象中,来解耦对象之间的直接依赖关系。 2. 解决程序员的七夕缘分问题示例 假设我们有…

    C# 2023年5月31日
    00
  • C#实现网络小程序的步骤详解

    下面是详细讲解“C#实现网络小程序的步骤详解”的完整攻略。 1. 确定需求和功能 在开始任何项目之前,我们必须明确需求和目标。首先,确定你的网络小程序需要完成的功能,包括功能模块、界面设计等,以此为基础,设计项目结构和流程。 2. 确定开发环境 C#可以在Windows平台上运行,因此您需要安装Visual Studio等适用的软件开发工具。您需要安装.NE…

    C# 2023年6月1日
    00
  • 深入探究ASP.NET Core Startup初始化问题

    深入探究 ASP.NET Core Startup 初始化问题 在 ASP.NET Core 中,Startup 类是应用程序的入口点,它负责配置应用程序的服务和中间件。本攻略将深入探究 ASP.NET Core Startup 初始化问题,包括 Startup 类的构造函数、ConfigureServices 方法和 Configure 方法。 Start…

    C# 2023年5月17日
    00
  • C#串口接收程序的实现

    C#串口接收程序的实现攻略 串口通信是一种常见的设备与计算机之间进行数据传输的方式。在C#中,我们可以使用SerialPort类来实现串口接收程序的实现。下面是实现串口接收程序的完整攻略: 1. 创建串口接收程序的项目 首先,我们需要创建一个新的C#项目。在Visual Studio中,可以通过选择“新建项目”并选择“控制台应用程序”来完成。在新建项目的过程…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部