Delegate 運算子深入淺出

flxx發表於2024-08-21

目錄
  • 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!");

在上面的例子中,我們定義了一個名為 MyDelegatedelegate 型別,它接受一個字串引數,沒有返回值。然後,我們定義了一個名為 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 表示式來建立一個 ActionFunc 型別的例項。

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 型別的例項,如 ActionFunc。透過了解和掌握 delegate 運算子,你可以更加高效地編寫 C# 程式碼。

相關文章