1. 委托
1.1 委托的定义
在C#中,委托是一种引用类型,它可以封装一个或多个方法,并允许以统一的方式调用这些方法。委托通常用于处理事件和回调函数。
delegate void MyDelegate(int x);
上面的代码定义了一个委托类型MyDelegate,它可以引用一个参数为int类型、返回值为void的方法。
1.2 使用委托
可以使用委托来引用一个方法,并通过委托调用该方法。
void PrintNumber(int num)
{
Console.WriteLine("Number: " + num);
}
void Main()
{
MyDelegate del = PrintNumber;
del(10);
}
上面的代码中,将PrintNumber方法赋值给委托del,并通过委托调用PrintNumber方法。
1.3 委托的多播
委托可以引用多个方法,这称为委托的多播。多播委托可以使用"+"或"+="运算符添加方法,使用"-"或"-="运算符移除方法。
void PrintNumber(int num)
{
Console.WriteLine("Number: " + num);
}
void PrintSquare(int num)
{
Console.WriteLine("Square: " + (num * num));
}
void Main()
{
MyDelegate del = PrintNumber;
del += PrintSquare;
del(10);
}
上面的代码中,将PrintNumber和PrintSquare两个方法添加到委托del中,并通过委托调用这两个方法。
2. 匿名函数
2.1 匿名函数的定义
匿名函数是一种不具有方法名称的函数,它可以作为委托类型的参数或局部变量。
在C#中,可以使用匿名方法或lambda表达式来定义匿名函数。
2.2 使用匿名方法
delegate void MyDelegate(int x);
void Main()
{
MyDelegate del = delegate(int num) {
Console.WriteLine("Number: " + num);
};
del(10);
}
上面的代码中,使用匿名方法定义了一个委托del,并通过委托调用匿名方法。
2.3 使用lambda表达式
delegate void MyDelegate(int x);
void Main()
{
MyDelegate del = (num) => Console.WriteLine("Number: " + num);
del(10);
}
上面的代码中,使用lambda表达式定义了一个委托del,并通过委托调用lambda表达式。
3. Lambda表达式
3.1 Lambda表达式的定义
Lambda表达式是一种简洁的语法形式,可以创建匿名函数。它通常由参数列表、箭头符号和函数体组成。
3.2 使用Lambda表达式
List<int> numbers = new List<int>() { 1, 2, 3, 4, 5 };
var result = numbers.Where(x => x % 2 == 0);
foreach (int num in result)
{
Console.WriteLine(num);
}
上面的代码中,使用Lambda表达式筛选出numbers列表中的偶数,并将结果存储在result变量中,然后依次打印出偶数。
总结
本文介绍了C#中的委托、匿名函数和Lambda表达式。委托是一种引用类型,可以封装一个或多个方法,并允许以统一的方式调用这些方法。匿名函数是一种不具有方法名称的函数,它可以作为委托类型的参数或局部变量。Lambda表达式是一种简洁的语法形式,可以创建匿名函数。
通过本文的学习,读者可以了解到委托、匿名函数和Lambda表达式的基本概念和使用方法。这些功能在实际编码中非常常用,在处理事件和回调函数等场景中发挥重要作用。