C#中的Action和Func委托 – 通过示例进行解释

发布时间 2023-07-08 09:05:02作者: 晓风晓浪

在 C# 中,称为委托的类型表示对具有特定签名的方法的引用。

开发人员使用委托来实现回调方法、处理事件以及执行需要稍后执行方法的任务。

C# 提供了各种委托,其中两个常用的委托是 Action 和 Func,它们都定义在 System 命名空间中。

在本教程中,您将了解 C# 中的 Action 和 Func 委托。

要下载本文的源代码,请访问此GitHub 存储库: /TobbyJay/ActionAndFuncDelegate。

让我们首先讨论 Action 委托并探索它的用法

(更|多优质内|容:java567 点 c0m)

 

C# 中的动作委托是什么?

Action 委托是一种预定义的委托类型,它封装了具有零个或多个不返回值的输入参数的方法。换句话说,一个 Action 委托代表一个返回 void 的方法。

考虑这个示例,演示在简单的控制台计算器应用程序中使用 Action 委托:

 Action<int, int> ActionCalculator = (a, b) =>
 {
    Console.WriteLine($"Addition result: {a + b}");
    Console.WriteLine($"Subtraction result: {a - b}");
    Console.WriteLine($"Multiplication result: {a * b}");
    Console.WriteLine($"Division result: {a / b}");
 };
 
 ActionCalculator(4, 2);

在此示例中,我们定义了一个名为 ActionCalculator 的 Action 委托。它采用两个整数参数并使用这些参数执行四个基本算术运算。然后,我们使用值 4 和 2 调用委托。

该应用程序在运行时产生以下输出:

 Addition result: 6
 Subtraction result: 2
 Multiplication result: 8
 Division result: 2

正如您所看到的,利用 Action 委托简化了将一个方法作为参数传递给另一个方法的过程。

C# 中的 Func 委托是什么?

Func 委托是另一种预定义的委托类型,它表示具有零个或多个返回值的输入参数的方法。与 Action 委托不同,Func 委托的返回类型可以是任何类型。

让我们考虑一个在简单的控制台计算器应用程序中使用 Func 委托的示例。

在这个例子中,我们定义了一个 Calculator 类:

 public class Calculator
 {
    public int Add(int a, int b) => a + b;
    public int Subtract(int a, int b) => a - b;
    public int Multiply(int a, int b) => a * b;
    public int Divide(int a, int b) => a / b;
 }

Calculator 类包含执行四种基本算术运算的方法。

接下来,我们创建四个 Func 委托,每个委托都指向计算器的方法之一:

 var FuncCalculator = new Calculator();
 
 Func<int, int, int> add = FuncCalculator.Add;
 Func<int, int, int> subtract = FuncCalculator.Subtract;
 Func<int, int, int> multiply = FuncCalculator.Multiply;
 Func<int, int, int> divide = FuncCalculator.Divide;
 
 Console.WriteLine($"Addition result: {add(4, 2)}");
 Console.WriteLine($"Subtraction result: {subtract(4, 2)}");
 Console.WriteLine($"Multiplication result: {multiply(4, 2)}");
 Console.WriteLine($"Division result: {divide(4, 2)}");

最后,我们使用值 4 和 2 调用每个委托并将结果打印到控制台。

计算器应用程序在运行时显示以下输出:

 Addition result: 6
 Subtraction result: 2
 Multiplication result: 8
 Division result: 2

Func 委托提供了一种简单的方法来定义和使用方法,将方法作为参数传递并作为结果返回。

结论

总之,Action 和 Func 委托提供了一种将方法调用封装在委托对象内的方法。

当方法不返回值时,开发人员使用 Action 委托;当方法返回值时,开发人员使用 Func 委托。

(更|多优质内|容:java567 点 c0m)