进阶系列(8)——匿名方法与lambda表达式
一 匿名方法的介绍
     匿名方法是为了简化委托的实现,方便调用委托方法而出现的,同时,匿名方法也是学好lambda表达式的基础。在委托调用的方法中,如果方法只被调用一次,这个时候我们就没有必要创建具名方法,从而用匿名方法更为方便。
二 匿名方法的使用场景
  1 声明委托变量时作为初始化表达式
  2 组合委托时赋值语句的右边
  3 为委托增加事件时赋值语句的右边
三 匿名方法的定义
  匿名方法是在初始化委托时内联声明的方法
  Delegate (参数列表){语句块}
(一)返回值
匿名方法不会显示声明返回值。如果委托有void类型的返回值,匿名方法就不能有返回值

(二)参数
  以下情况,我们可以使圆括号为空或省略圆括号来简化匿名方法的参数列表(两项同时成立)
  1 委托的参数列表不包含任何out参数
  2 匿名方法不使用任何参数
(三)params参数
  如果声明委托的参数列表包含了params参数,那么params关键字在匿名方法的参数列表中就会被省略
四 匿名方法的变量和参数的作用域
 1 参数以及声明在匿名方法内部的局部变量的作用域限制在实现方法的主体之内
 2 与委托的具名方法不同,匿名方法可以访问它们外围作用域的局部变量和环境,方法中的代码可以访问外围变量并且输入它
五 lambda表达式简介
lambda表达式是比匿名方法更简洁的一种匿名方法语法。
lambda运算符:所有的lambda表达式都是用新的lambda运算符 " => ",可以叫它,“转到”或者 “成为”。运算符将表达式分为两部分,左边指定输入参数,右边是lambda的主体。
lambda表达式:
1.一个参数:param=>expr
2.多个参数:(param-list)=>expr

六 匿名方法转换为lambda表达式的步骤
1 删除delegate关键字
2 在参数列表和匿名方法主体之间放lambda运算符=>.lambda运算符读作goes to
七 简化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表达式的注意事项

进阶系列(8)——匿名方法与lambda表达式的更多相关文章
- 从匿名方法到 Lambda 表达式的推演过程
		
Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数. 通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数. 以上是msdn官网对Lambda 表达式 ...
 - 委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式
		
引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录 ...
 - C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质
		
前言 C# 3.0 引入了 Lambda 表达式,程序员们很快就开始习惯并爱上这种简洁并极具表达力的函数式编程特性. 本着知其然,还要知其所以然的学习态度,笔者不禁想到了几个问题. (1)匿名函数(匿 ...
 - 委托、匿名方法、Lambda表达式的演进
		
摘自:"http://www.cnblogs.com/eagle1986/archive/2012/01/19/2327358.html 假设给我们一个泛型对象List<T>,T ...
 - 匿名方法,Lambda表达式,高阶函数
		
原文:匿名方法,Lambda表达式,高阶函数 匿名方法 c#2.0引入匿名方法,不必创建单独的方法,因此减少了所需的编码系统开销. 常用于将委托和匿名方法关联,例如1. 使用委托和方法关联: this ...
 - Fun<>,匿名方法,Lambda表达式 冒泡排序C#
		
大头文 分享,进步 冒泡排序C#实现,使用委托,包括三种方式:Fun<>,匿名方法,Lambda表达式 冒泡排序是一种简单的排序方法,适合于小量数字排序,对于大量数字(超过10个),还有更 ...
 - 泛型委托及委托中所涉及到匿名方法、Lambda表达式
		
泛型委托及委托中所涉及到匿名方法.Lambda表达式 引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到 ...
 - .NET Framework System.Array.Sort 数组类,加深对 IComparer、IComparable 以及泛型委托、匿名方法、Lambda 表达式的理解
		
本文内容 自定义类 Array.Sort 参考资料 System.Array.Sort 有很多对集合的操作,比如排序,查找,克隆等等,你可以利用这个类加深对 IComparer.IComparable ...
 - C#中分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较。
		
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
 
随机推荐
- sql  事务处理 与 try catch
			
begin transaction tr declare @error int; ; select * from Car_Brand set @error=@error+@@ERROR set @er ...
 - jQuery 效果 - toggle() 方法切换元素的可见状态。
			
定义和用法 toggle() 方法切换元素的可见状态. 如果被选元素可见,则隐藏这些元素,如果被选元素隐藏,则显示这些元素. 语法 $(selector).toggle(speed,callback, ...
 - Spark SQL join的三种实现方式
			
引言 join是SQL中的常用操作,良好的表结构能够将数据分散到不同的表中,使其符合某种规范(mysql三大范式),可以最大程度的减少数据冗余,更新容错等,而建立表和表之间关系的最佳方式就是join操 ...
 - 2016-2017-2 20155325实验二《Java面向对象程序设计》实验报告
			
实验二 面向对象程序设计-1 答案截图 码云代码链接 链接1 实验遇到的问题和解决过程 问题1:在plugins里搜索不到JUnitGenerator V2.0只能搜到Generste Teats 问 ...
 - 初识Linux的感受与对它的印象——20155328张钰清
			
之前从未接触过虚拟机的我,由于这次寒假预备作业,稍稍地认识了一下Linux操作系统. 在自己笔记本上安装Linux操作系统 根据老师提供的<基于VirtualBox虚拟机安装Ubuntu图文教程 ...
 - Microsoft .NET Framework 4 安装 1603错误的解决
			
首先找到 C:\Windows\SoftwareDistribution\Download"这个文件夹,把里面的东西全删除了,然后把你更新失败的 NET Framework 4卸载了,然后 ...
 - jdk和tomcat版本对应
			
见tomcat的官网说明:tomcat.apache.org/whichversion.html Apache Tomcat ®是一个开源软件实现了Java Servlet和JavaServer Pa ...
 - WPF 带水印的密码输入框实现
			
原文:WPF 带水印的密码输入框实现 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/835055 ...
 - Android开发——LinearLayout和RelativeLayout的性能对比
			
0. 前言 我们都知道新建一个Android项目自动生成的Xml布局文件的根节点默认是RelativeLayout,这不是IDE默认设置,而是由android-sdk\tools\templates\ ...
 - Zabbix学习之路(二)之添加主机监控及自定义item监控
			
1.zabbix_get命令详解 安装zabbix-get命令 [root@linux-node1 ~]# yum install -y zabbix_get 参数说明: -s --host: 指定客 ...