C# - 函数委托(Func Delegate)
本文关键字:Func Delegate 函数 | 更新日期: 2023-09-12 17:40:11
C# 包括内置的泛型委托类型Func
和Action
,因此在大多数情况下无需手动定义自定义委托。
Func
是包含在 System
命名空间中的泛型委托。它具有零个或多个输入参数和一个输出参数。最后一个参数被视为 out 参数。
接受一个输入参数和一个 out 参数的 Func
委托在 System
命名空间中定义,如下所示:
namespace System
{
public delegate TResult Func<in T, out TResult>(T arg);
}
尖括号<>
中的最后一个参数被视为返回类型,其余参数被视为输入参数类型,如下图所示。
Func delegate
具有两个输入参数和一个输出参数的 Func 委托将如下所示。
Func delegate
以下Func
委托采用两个 int 类型的输入参数,并返回 int 类型的值:
Func<int, int, int> sum;
可以将任何方法分配给上述 func 委托,该方法采用两个 int 参数并返回一个 int 值。
class Program
{
static int Sum(int x, int y)
{
return x + y;
}
static void Main(string[] args)
{
Func<int,int, int> add = Sum;
int result = add(10, 10);
Console.WriteLine(result);
}
}
输出:
20Func 委托类型可以包含 0 到 16 个不同类型的输入参数。但是,它必须包含结果的 out 参数。例如,以下 Func 委托没有任何输入参数,它只包含一个 out 参数。
Func<int> getRandomNumber;
具有匿名方法的 C# 函数
可以使用委托关键字将匿名方法分配给 Func 委托。
Func<int> getRandomNumber = delegate()
{
Random rnd = new Random();
return rnd.Next(1, 100);
};
Func with Lambda 表达式
Func 委托也可以与 lambda 表达式一起使用,如下所示:
Func<int> getRandomNumber = () => new Random().Next(1, 100);
//Or
Func<int, int, int> Sum = (x, y) => x + y;
注意:
- Func 是内置的委托类型。
- 函数委托类型必须返回一个值。
- 函数委托类型可以有 0 到 16 个输入参数。
- 函数委托不允许引用和输出参数。
- Func 委托类型可以与匿名方法一起使用,也可以与lambda 表达式一起使用。