- Delegate 基礎
- Delegate 運算子
- Lambda 表示式
- 總結
在 C# 中,
delegate
是一個非常重要的概念,它提供了一種將方法作為引數傳遞的方式。delegate
運算子,即 =>
,是 C# 6.0 引入的一種新語法,用於簡化 delegate
的宣告和使用。在這篇部落格中,我們將深入探討 delegate
運算子的原理和用法。
Delegate 基礎
首先,讓我們回顧一下 delegate
的基礎。在 C# 中,delegate
是一種型別,它定義了方法的簽名。你可以將任何與該簽名匹配的方法賦值給 delegate
型別的變數。這樣,你就可以透過這個變數來呼叫這個方法。
public delegate void MyDelegate(string message);
public void Greet(string message)
{
Console.WriteLine(message);
}
MyDelegate delegateInstance = Greet;
delegateInstance("Hello, Delegate!");
在上面的例子中,我們定義了一個名為 MyDelegate
的 delegate
型別,它接受一個字串引數,沒有返回值。然後,我們定義了一個名為 Greet
的方法,它符合 MyDelegate
的簽名。最後,我們將 Greet
方法賦值給 MyDelegate
型別的變數 delegateInstance
,並透過它來呼叫 Greet
方法。
Delegate 運算子
在 C# 6.0 之前,如果你想透過 delegate
來呼叫一個匿名方法,你需要使用以下語法:
MyDelegate anonymousDelegate = delegate(string message)
{
Console.WriteLine(message);
};
雖然這個語法已經比直接定義一個方法要簡潔了,但 C# 6.0 引入的 delegate
運算子 =>
進一步簡化了這個過程。現在,你可以使用以下語法來定義一個匿名方法:
MyDelegate lambdaExpression = message => Console.WriteLine(message);
這個語法更加簡潔明瞭,你只需要寫出引數和方法的主體,而不需要 delegate
關鍵字和花括號。
Lambda 表示式
使用 delegate
運算子定義的匿名方法通常被稱為 Lambda 表示式。Lambda 表示式不僅可以用於定義匿名方法,還可以用於建立 delegate
型別的例項。例如,你可以使用 Lambda 表示式來建立一個 Action
或 Func
型別的例項。
Action<string> action = message => Console.WriteLine(message);
Func<int, int, int> add = (a, b) => a + b;
在上面的例子中,我們分別建立了一個 Action
型別的例項和一個 Func
型別的例項。Action
型別是一個預定義的 delegate
型別,它表示一個沒有返回值的方法。Func
型別是一個預定義的 delegate
型別,它表示一個有返回值的方法。Func
的最後一個型別引數是返回型別,前面的型別引數是方法的引數型別。
總結
delegate
運算子 =>
是 C# 6.0 引入的一種新語法,用於簡化 delegate
的宣告和使用。它允許你以更簡潔的方式定義匿名方法,也稱為 Lambda 表示式。Lambda 表示式不僅可以用於定義匿名方法,還可以用於建立 delegate
型別的例項,如 Action
和 Func
。透過了解和掌握 delegate
運算子,你可以更加高效地編寫 C# 程式碼。