02011402 委托02-匿名方法、Lambda表达式
1. 匿名方法
- 至此,我们已经介绍了使用静态方法或实例方法来实例化委托。在这种情况下,方法本身都可以被代码的其它部分显式调用。
- 如果方法只会使用一次,在这种情况下,除了创建委托的语法需要,没有必要创建独立的具名方法。
- 匿名方法是在实例化委托时内联声明的方法。
1.1 比较具名方法和匿名方法
// @1使用具名方法来实例化委托
using System; namespace Demo01
{delegate int MyDel(int x);class MyClass{public static int Add1(int x){return x += 2;}static void Main(){MyDel mDel1 = Add1; // 通过具名方法来实例化委托Console.WriteLine($"Value:{mDel1(10)}");Console.ReadLine();}}
}控制台输出:
Value:12
—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—·—
// @2 使用匿名方法来实例化委托
using System; namespace Demo01
{delegate int MyDel(int x);class MyClass{static void Main(){MyDel mDel1 = delegate (int x) // 通过匿名方法来实例化委托{return x += 2;};Console.WriteLine($"Value:{mDel1(10)}");Console.ReadLine();}}
}控制台输出:
Value:12
1.2 使用匿名方法
- 可以在如下地方使用匿名方法。
- 声明委托变量时作为初始化表达式。
- 组合委托时在赋值语句的右边。
- 为委托增加事件时在赋值语句的右边。(后续章节会讲解)
1.3 匿名方法的语法
delegate(Parameter){ImplementationCode} // 匿名方法表达式↑ ↑ ↑
关键字 参数列表 语句块说明:
1. 匿名方法表达式要有delegate类型关键字。
2. 匿名方法表达式要有参数列表,如果语句块没有任何参数则可以省略。
3. 语句块,它包含了匿名方法的代码。
1.4 匿名方法的返回类型
- 匿名方法不会显式声明返回值。然而,实现代码本身的行为必须通过返回一个与委托的返回值类型相同的值来匹配委托的返回值。
delegate int MyDel(int myInt)static void Main()
{MyDel mDel = delegate(int x) // 匿名方法不会显式的声明返回值{retuan x + 20; // 返回一个整型值}
}说明:如上代码中,委托的返回类型是int,因此匿名方法的实现代码也必须在代码路径中返回int。
1.5 匿名方法的参数
- 除了参数数组,匿名方法的参数列表必须在如下3方面与委托匹配。
- 参数数量。
- 参数类型及其位置。
- 修饰符。
- 可以通过()为空或省略圆括号来简化匿名方法的参数列表,但必须满足如下两个条件。
- 委托的参数列表不包括任何out参数。
- 匿名方法不适用任何参数。
delegate void MyDel(int x); // 委托参数列表没有out参数
MyDel mDel = delegate // 没有参数列表
{PrintMessage(); // 方法体中没有使用任何参数
}
2. Params参数
结尾
书籍:C#图解教程
著:【美】丹尼尔 · 索利斯;卡尔 · 施罗坦博尔
译:窦衍森;姚琪琳
ISBN:978-7-115-51918-4
版次:第5版
发行:人民邮电出版社
※敬请购买正版书籍,侵删请联系85863947@qq.com※
※本文章为看书或查阅资料而总结的笔记,仅供参考,如有错误请留言指正,谢谢!※