C# 匿名委托和lambda表达式

匿名委托

C# 委托 文中,委托方法 Std() 和 Std2(),都很简单,此时不需要声明方法,可以用匿名委托

static void Main(string[] args)
{
    StdDel sd = new StdDel(delegate(){
        Console.WriteLine("学习委托1");
    });// 匿名委托
    Test(sd);
    Console.ReadKey();
}

lambda表达式

可以继续简化委托

至简原则

  1. 只有一个参数,小括号可以 省略;但没有参数 或 参数数量超过 1,不能省略小括号
  2. 函数体只有一行,则花括号 {} 可以省略
  3. 函数体只有一行,而是是 return ,则花括号 {} 和 return 可以省略
static void Main(string[] args)
{
    StdDel sd = new StdDel(() =>Console.WriteLine("学习委托1"));// 匿名委托
    Test(sd);
    Console.ReadKey();
}

应用场景

让a函数调用b函数,b函数从1打印到100,回调函数能让a函数监控到b函数内部循环的进度

// 定义一个委托类型用于回调函数
public delegate void ProgressCallback(int progress);

public class Program
{
    public static void b(ProgressCallback callback)
    {
        for (int i = 1; i <= 100; i++)
        {
            // 模拟工作
            System.Threading.Thread.Sleep(50);
            // 调用回调通知进度
            callback(i);
        }
    }

    static void Main(string[] args)
    {
        // b函数的进度更新时会调用此匿名函数
        b((progress) => 
        {
            Console.WriteLine($"Progress from b: {progress}%");
        });
    }
}