进阶系列(8)——匿名方法与lambda表达式

一 匿名方法的介绍
     匿名方法是为了简化委托的实现,方便调用委托方法而出现的,同时,匿名方法也是学好lambda表达式的基础。在委托调用的方法中,若是方法只被调用一次,这个时候咱们就没有必要建立具名方法,从而用匿名方法更为方便。
二 匿名方法的使用场景
  1 声明委托变量时做为初始化表达式
  2 组合委托时赋值语句的右边
  3 为委托增长事件时赋值语句的右边
三 匿名方法的定义
  匿名方法是在初始化委托时内联声明的方法
  Delegate (参数列表){语句块}
(一)返回值
spa

匿名方法不会显示声明返回值。若是委托有void类型的返回值,匿名方法就不能有返回值code

(二)参数
  如下状况,咱们能够使圆括号为空或省略圆括号来简化匿名方法的参数列表(两项同时成立)
  1 委托的参数列表不包含任何out参数
  2 匿名方法不使用任何参数
(三)params参数
  若是声明委托的参数列表包含了params参数,那么params关键字在匿名方法的参数列表中就会被省略
四 匿名方法的变量和参数的做用域
 1 参数以及声明在匿名方法内部的局部变量的做用域限制在实现方法的主体以内
 2 与委托的具名方法不一样,匿名方法能够访问它们外围做用域的局部变量和环境,方法中的代码能够访问外围变量而且输入它blog

五 lambda表达式简介

     lambda表达式是比匿名方法更简洁的一种匿名方法语法。事件

     lambda运算符:全部的lambda表达式都是用新的lambda运算符 " => ",能够叫它,“转到”或者 “成为”。运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体。作用域

  lambda表达式:编译器

         1.一个参数:param=>exprstring

         2.多个参数:(param-list)=>exprit

   

六 匿名方法转换为lambda表达式的步骤

   1 删除delegate关键字编译

   2 在参数列表和匿名方法主体之间放lambda运算符=>.lambda运算符读做goes toclass

七 简化lambda表达式

1 编译器还能够从委托的声明中知道委托参数的类型,所以lambda表达式容许咱们省略类型参数。

   带有类型的参数列表称为显示类型

   省略类型的参数列表称为隐式类型

2 若是只有一个隐式类型参数,咱们能够省略周围的括号

3 lambda表达式容许表达式的主体是语句块或者表达式。若是语句块包含了一个返回语句,咱们能够将语句块替换为return关键字后的表达式(即 去掉关键字return)

八 例子:

namespace 匿名方法和lambad表达式 { delegate int MyDelegate(int x); //声明一个委托 class Program { public static int Add(int x) //实现委托的方法 { return x + 20; } static void Main(string[] args) { MyDelegate del = delegate (int x){ return x + 20;};//匿名方法 MyDelegate del1 = (int x) =>{ return x + 20; }; //lambad表达式 变形1:去掉delegate关键字
MyDelegate del2 = (x) => { return x + 20; }; //lambad表达式 变形2:去掉参数类型
MyDelegate del3 = x => x + 20; //lambad表达式 变形3:去掉参数括号和return关键字
Console.WriteLine("两个数的和为{0}", del3(20)); Console.ReadLine(); } } }

九 lambda表达式的注意事项

 

相关文章
相关标签/搜索