在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<int, int> 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>
委托是非常重要的。