当前位置: 欣欣网 > 码农

C# 中的 Action和 Func委托

2024-05-29码农

在C#中, Action<T> Func<T> 是两种常用的泛型委托,它们为开发者提供了一种类型安全的方式来定义和处理方法引用。 Action<T> Func<T> 的主要区别在于, Action<T> 用于封装没有返回值(即返回类型为 void )的方法,而 Func<T> 则用于封装有返回值的方法。

Action 委托

Action<T> 委托用于表示接受特定类型参数并不返回任何值( void )的方法。 T 在这里是一个占位符,代表委托可以接受的参数类型。 Action<T> 可以有多个类型参数,比如 Action<T1, T2, ...> ,最多可以支持16个类型参数。

示例代码:

using System;
classProgram
{
staticvoidMain()
{
// 定义一个 Action<string> 委托实例,并关联一个方法
Action<string> greet = Greet;
// 调用委托实例
greet("World");
}
staticvoidGreet(string name)
{
Console.WriteLine($"Hello, {name}!");
}
}

在这个例子中,我们定义了一个 Greet 方法,它接受一个字符串参数并不返回任何值。然后,我们创建了一个 Action<string> 委托实例,并将其关联到 Greet 方法上。最后,我们通过委托实例调用了 Greet 方法。

Func 委托

Action<T> 不同, Func<T> 委托用于表示具有返回值的方法。 Func<T> 的第一个类型参数是输入参数的类型,最后一个类型参数是返回值的类型。例如, Func<int, int> 表示接受一个 int 参数并返回一个 int 值的方法。

示例代码:

using System;
classProgram
{
staticvoidMain()
{
// 定义一个 Func<int, int> 委托实例,并关联一个方法
Func<intint> square = CalculateSquare;
// 调用委托实例并打印结果
int result = square(5);
Console.WriteLine($"The square of 5 is {result}.");
}
staticintCalculateSquare(int number)
{
return number * number;
}
}

在这个例子中,我们定义了一个 CalculateSquare 方法,它接受一个整数参数并返回一个整数结果。然后,我们创建了一个 Func<int, int> 委托实例,并将其关联到 CalculateSquare 方法上。最后,我们通过委托实例调用了 CalculateSquare 方法,并打印了结果。

总结

Action<T> Func<T> 委托是C#中非常有用的工具,它们提供了一种简洁、类型安全的方式来引用和调用方法。通过使用这些委托,开发者可以更加灵活地编写可重用的代码,并轻松地实现回调函数和事件驱动的设计模式。在实际开发中,根据方法是否有返回值来选择使用 Action<T> 还是 Func<T> 委托是非常重要的。