當前位置: 妍妍網 > 碼農

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