C# 中的 Action 和 Func 委托
在C#中,Action<T>和Func<T>是兩種常用的泛型委托,它們?yōu)殚_發(fā)者提供了一種類型安全的方式來定義和處理方法引用。Action<T>和Func<T>的主要區(qū)別在于,Action<T>用于封裝沒有返回值(即返回類型為void)的方法,而Func<T>則用于封裝有返回值的方法。
Action委托
Action<T>委托用于表示接受特定類型參數(shù)并不返回任何值(void)的方法。T在這里是一個(gè)占位符,代表委托可以接受的參數(shù)類型。Action<T>可以有多個(gè)類型參數(shù),比如Action<T1, T2, ...>,最多可以支持16個(gè)類型參數(shù)。
示例代碼:
using System;
class Program
{
static void Main()
{
// 定義一個(gè) Action<string> 委托實(shí)例,并關(guān)聯(lián)一個(gè)方法
Action<string> greet = Greet;
// 調(diào)用委托實(shí)例
greet("World");
}
static void Greet(string name)
{
Console.WriteLine($"Hello, {name}!");
}
}
在這個(gè)例子中,我們定義了一個(gè)Greet方法,它接受一個(gè)字符串參數(shù)并不返回任何值。然后,我們創(chuàng)建了一個(gè)Action<string>委托實(shí)例,并將其關(guān)聯(lián)到Greet方法上。最后,我們通過委托實(shí)例調(diào)用了Greet方法。
Func委托
與Action<T>不同,F(xiàn)unc<T>委托用于表示具有返回值的方法。Func<T>的第一個(gè)類型參數(shù)是輸入?yún)?shù)的類型,最后一個(gè)類型參數(shù)是返回值的類型。例如,F(xiàn)unc<int, int>表示接受一個(gè)int參數(shù)并返回一個(gè)int值的方法。
示例代碼:
using System;
class Program
{
static void Main()
{
// 定義一個(gè) Func<int, int> 委托實(shí)例,并關(guān)聯(lián)一個(gè)方法
Func<int, int> square = CalculateSquare;
// 調(diào)用委托實(shí)例并打印結(jié)果
int result = square(5);
Console.WriteLine($"The square of 5 is {result}.");
}
static int CalculateSquare(int number)
{
return number * number;
}
}
在這個(gè)例子中,我們定義了一個(gè)CalculateSquare方法,它接受一個(gè)整數(shù)參數(shù)并返回一個(gè)整數(shù)結(jié)果。然后,我們創(chuàng)建了一個(gè)Func<int, int>委托實(shí)例,并將其關(guān)聯(lián)到CalculateSquare方法上。最后,我們通過委托實(shí)例調(diào)用了CalculateSquare方法,并打印了結(jié)果。
總結(jié)
Action<T>和Func<T>委托是C#中非常有用的工具,它們提供了一種簡(jiǎn)潔、類型安全的方式來引用和調(diào)用方法。通過使用這些委托,開發(fā)者可以更加靈活地編寫可重用的代碼,并輕松地實(shí)現(xiàn)回調(diào)函數(shù)和事件驅(qū)動(dòng)的設(shè)計(jì)模式。在實(shí)際開發(fā)中,根據(jù)方法是否有返回值來選擇使用Action<T>還是Func<T>委托是非常重要的。