下面是详细讲解“浅谈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技术站