C# 中的 Action 和 Func 委托
在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;
class Program
{
static void Main()
{
// 定義一個 Action<string> 委托實例,并關聯一個方法
Action<string> greet = Greet;
// 調用委托實例
greet("World");
}
static void Greet(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;
class Program
{
static void Main()
{
// 定義一個 Func<int, int> 委托實例,并關聯一個方法
Func<int, int> square = CalculateSquare;
// 調用委托實例并打印結果
int result = square(5);
Console.WriteLine($"The square of 5 is {result}.");
}
static int CalculateSquare(int number)
{
return number * number;
}
}
在這個例子中,我們定義了一個CalculateSquare方法,它接受一個整數參數并返回一個整數結果。然后,我們創建了一個Func<int, int>委托實例,并將其關聯到CalculateSquare方法上。最后,我們通過委托實例調用了CalculateSquare方法,并打印了結果。
總結
Action<T>和Func<T>委托是C#中非常有用的工具,它們提供了一種簡潔、類型安全的方式來引用和調用方法。通過使用這些委托,開發者可以更加靈活地編寫可重用的代碼,并輕松地實現回調函數和事件驅動的設計模式。在實際開發中,根據方法是否有返回值來選擇使用Action<T>還是Func<T>委托是非常重要的。