匿名方法本质上是一种没有显式名称的方法,它可以作为参数传递给需要委托类型的方法,常用于事件处理、回调函数等场景,能够让代码更加简洁和紧凑。
匿名方法使用 delegate
关键字来定义,基本语法如下:
delegate (参数列表)
{
方法体;
};
示例:
using System;
class Program
{
static void Main()
{
// 定义一个无参数的委托类型
Action myAction = delegate ()
{
Console.WriteLine("这是一个无参数的匿名方法");
};
// 调用委托
myAction();
}
}
using System;
class Program
{
static void Main()
{
// 定义一个带参数的委托类型
Func add = delegate (int a, int b)
{
return a + b;
};
// 调用委托
int result = add(3, 5);
Console.WriteLine($"结果是: {result}");
}
}
using System;
using System.Threading;
class EventExample
{
public event EventHandler MyEvent;
public void TriggerEvent()
{
MyEvent?.Invoke(this, EventArgs.Empty);
}
}
class Program
{
static void Main()
{
EventExample example = new EventExample();
// 使用匿名方法处理事件
example.MyEvent += delegate (object sender, EventArgs e)
{
Console.WriteLine("事件被触发了");
};
// 触发事件
example.TriggerEvent();
}
}
在 C# 3.0 及以后的版本中,引入了 Lambda 表达式,它是一种更简洁的创建委托实例的方式,通常可以替代匿名方法。例如,上面的 add
委托使用 Lambda 表达式可以写成:
Func add = (a, b) => a + b;
Lambda 表达式在语法上更加简洁,因此在实际开发中使用更为广泛。
() => Console.WriteLine("无参数的Lambda表达式");
num => num * 2;
(a, b) => a + b;