首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C# 委托與 Lambda 表達式:從命名方法到內聯代碼的演進

     編輯:關於C++

背景:Java Callable 模式

Java 中用 Callable<T> 傳遞「可重試的代碼塊」:

Stat result = RetryLoop.callWithRetry(client, () -> client.getZooKeeper().setData(...));

C# 實現演進

1. 委托聲明

delegate string CustomDelegate(string material);

2. C# 1.0:命名方法

string BakePizza(string m) => $"將{m}烘烤成西瓜";
CustomDelegate bake = BakePizza;
PizzaMaker.MakePizza("張三的Pizza", bake);

3. C# 2.0:匿名方法

PizzaMaker.MakePizza("李四的Pizza", delegate(string m) {
    return $"將{m}烘烤成面包";
});

4. C# 3.0+:Lambda 表達式(首選)

PizzaMaker.MakePizza("季義欽的Pizza", m => $"將{m}烘烤成意大利pizza");
  • => 左側參數,右側表達式/語句塊。
  • 類型推斷:參數類型可省略。
  • 表達式主隱式返回,語句塊需 return。

完整示例:重試邏輯封裝

using System;
delegate TResult Func(); // 無參有返回值委托
class RetryHelper {
    public static T ExecuteWithRetry(Func action, int maxRetries = 3) {
        for (int i = 0; ; ++i) {
            try { return action(); }
            catch when (i < maxRetries) { /* 等待、記錄 */ }
        }
    }
}
class Program {
    static void Main() {
        // Lambda 直接傳遞業務邏輯
        var result = RetryHelper.ExecuteWithRetry(() => {
            // 呼叫 ZooKeeper API
            return zooKeeper.setData(path, data, version);
        });
    }
}

關鍵點總結

  • 委托 是類型安全的函數指針,可引用命名/匿名/Lambda 方法。
  • Lambda 是匿名方法的語法糖,簡潔表達內聯邏輯,支援閉包(捕獲外部變量)。
  • 函數式風格:將「做什麼」作為參數傳遞給「怎麼做」(重試、並發、異步等框架代碼)。
  • C# 核心委托類型:Action (無返回)、Func<TResult> (有返回)、Predicate<T> (bool 返回)。

掌握委托與 Lambda,是編寫現代 C#(.NET)高階框架、異步編程、LINQ 查詢的基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved