匿名委托
C# 委托 文中,委托方法 Std() 和 Std2(),都很简单,此时不需要声明方法,可以用匿名委托
static void Main(string[] args)
{
StdDel sd = new StdDel(delegate(){
Console.WriteLine("学习委托1");
});// 匿名委托
Test(sd);
Console.ReadKey();
}
lambda表达式
可以继续简化委托
至简原则
- 只有一个参数,小括号可以 省略;但没有参数 或 参数数量超过 1,不能省略小括号
- 函数体只有一行,则花括号
{}可以省略 - 函数体只有一行,而是是
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}%");
});
}
}