C# Delegate, Func, Action & Lambda


  1. 說明

筆記 C# 從 Delegate 到 Func & Action 的出現,到最後的 Lambda 對於語法使用上帶來什麼樣的差異。

logo

說明

Delegate
C# 1.0 就存在的元老,將方法作為參數傳遞的型別,定義方法的簽名和回傳值型別,可以用來實現事件處理機制。
Func
C# 3.0 出現,泛型 Delegate,可以表示具有一個或多個輸入參數和回傳值的方法
Action
C# 3.0 出現,泛型 Delegate,與 Func 的差別在於無回傳值。
Lambda Expression
C# 3.0 出現,簡潔的方法定義方式,可以用於創造匿名方法,並且搭配 Linq 查詢使用。

// 定義 Delegate Type
delegate int CalcDelegate(int a, int b);

// 實作 Add 方法的邏輯
static int Add(int a, int b)
{
	return a + b;
}

void Main()
{
	int result;

	// 使用 Delegate 搭配 Add 方法進行運算
	CalcDelegate calc = Add;
	result = calc(10, 5);

	// 使用 Func 搭配 Add 方法進行運算
	Func<int, int, int> calcFunc = Add;
	result = calc(10, 5);

	// 使用 Lambda Expression 定義 Add 方法
	Func<int, int, int> add = (a, b) => a + b;
	result = add(10, 5);
}