前面讲过委托的知识,本次由委托过渡到Lambda表达式,更易于理解。

  class Program
{
static void Main(string[] args)
{
int[] intA = { , , , };
ProcArray(intA, AddOne);
foreach (int i in intA)
{
Console.Write(i + " ");
} Console.ReadKey();
}
private static void ProcArray(int[] intArra, ProcIntArrayHandler procHandler)
{
for (int i = ; i < intArra.Length; i++)
{
intArra[i] = procHandler(intArra[i]);
}
} private static int AddOne(int procNum)
{
return procNum + ;
}
private static int AddTwo(int procNum)
{
return procNum + ;
}
}
public delegate int ProcIntArrayHandler(int procNum);

委托

其中ProcIntArrayHandler是委托类型,表示处理一个整数,并返回对该整数处理的结果。在ProcArray方法中,可用procHandler参数所引用的实例来处理数组中的每个int元素。
注:委托是引用类型,不必用new实例化。
 
在c#1.0中,需要委托实例化,如:ProcArray(intA, new ProcIntArrayHandler(AddTwo));该语法在c#高版本中仍支持。
 
匿名方法
c#2.0引入了匿名方法,使用了较简洁的语法创建委托,如:ProcArray(intA, delegate(int i) { return i + 20; });
 
Lambda
由以上代码可知,是将AddOne和AddTwo转换成委托类型,它们的参数类型与返回类型是和委托类型兼容,
我们注意到private static int AddOne(int procNum)的声明比方法主体return procNum + 1;冗长多了,仅仅只是为了转成委托类型。
c#3.0引入Lambda表达式,语法更简单,如:ProcArray(intA, (int i) => i + 10);
lambda语句组成:形参=>代码块。改语句包含了AddOne方法的大多数信息: 形参和代码块,方法名称和修饰符省略了。没有方法名,所以匿名方法和lambda表达式都称为匿名函数。
由于编译器能检查出参数类型和返回值,故还可以再次省略:如ProcArray(intA,i=>i+10);
注:如果是个无参数Lambda语句,则必须使用圆括号'()',如果是有多个参数也必须使用圆括号。

从委托、匿名方法到Lambda的更多相关文章

  1. 用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树

    这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托,表达式树这些应用.今天我尝试用简单的方法叙述一下,让大家在五 ...

  2. 委托学习笔记后续:泛型委托及委托中所涉及到匿名方法、Lambda表达式

    引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到和委托相关的匿名方法.Lambda表达式及泛型委托记录 ...

  3. 转帖:用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树

    用五分钟重温委托,匿名方法,Lambda,泛型委托,表达式树 这些对老一代的程序员都是老生常谈的东西,没什么新意,对新生代的程序员却充满着魅力.曾经新生代,好多都经过漫长的学习,理解,实践才能掌握委托 ...

  4. C# 从CIL代码了解委托,匿名方法,Lambda 表达式和闭包本质

    前言 C# 3.0 引入了 Lambda 表达式,程序员们很快就开始习惯并爱上这种简洁并极具表达力的函数式编程特性. 本着知其然,还要知其所以然的学习态度,笔者不禁想到了几个问题. (1)匿名函数(匿 ...

  5. 委托、匿名方法、Lambda表达式的演进

    摘自:"http://www.cnblogs.com/eagle1986/archive/2012/01/19/2327358.html 假设给我们一个泛型对象List<T>,T ...

  6. 委托,匿名方法,Lambda,泛型委托,表达式树

    一.委托:完成一个委托应分三个步骤://step01:首先用delegate定义一个委托;public delegate int CalculatorAdd(int x, int y);//step0 ...

  7. 泛型委托及委托中所涉及到匿名方法、Lambda表达式

    泛型委托及委托中所涉及到匿名方法.Lambda表达式 引言: 最初学习c#时,感觉委托.事件这块很难,其中在学习的过程中还写了一篇学习笔记:委托.事件学习笔记.今天重新温故委托.事件,并且把最近学习到 ...

  8. c#-委托,匿名方法,lambda表达的关系

    什么是委托: 包含单个方法的委托和函数指针是相似的,不同的是,委托是面向帝乡的并且是类型安全的 声明委托类型: delegate void mydel(int x); 声明委托和声明方法差不多,两个不 ...

  9. .NET Framework System.Array.Sort 数组类,加深对 IComparer、IComparable 以及泛型委托、匿名方法、Lambda 表达式的理解

    本文内容 自定义类 Array.Sort 参考资料 System.Array.Sort 有很多对集合的操作,比如排序,查找,克隆等等,你可以利用这个类加深对 IComparer.IComparable ...

  10. C#中分别对委托、匿名方法、Lambda表达式、Lambda表达式树以及反射执行同一方法的过程进行比较。

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

随机推荐

  1. Python全栈--9 __import__ 反射和面向对象基础 self 封装 继承(多继承的顺序) 多态

    一.反射 python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删 ...

  2. 使用apache和htaccess对目录访问设置密码保护配置教程

    对目录设置密码保护配置说明我们有时候访问某些网站的时候,要求输入用户名和密码才能访问.这是为了保护隐私,只让经过许可的人访问.在本教程中主要介绍两种方法,一种是通过apache httpd.conf配 ...

  3. springMVC框架中,在hib-config.xml配置sqlserver2008数据库连接的代码

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">     ...

  4. JQuery教程

    1.是javaScript库(js文件) 2.使用:script标签 3.语法:$开头 $().action() 列如:$('div').css("color",'red'); 4 ...

  5. Ext开场布局设计Viewport

    //加载dwr dwr.engine.setAsync(false); //***************************************框架定义部分***************** ...

  6. 【Java学习笔记】<集合框架>定义功能去除ArrayList中的重复元素

    import java.util.ArrayList; import java.util.Iterator; import cn.itcast.p1.bean.Person; public class ...

  7. Jade之Extends

    Extends jade允许多个jade文件继承一个jade文件. jade: //- layout.jade doctype html html head block title title Def ...

  8. xtrabackup工具安装

    1.首先从官网上http://www.percona.com/下载较新版本的xtrabackup percona-xtrabackup-2.2.7-5050-Linux-x86_64.tar.gz 2 ...

  9. HDU 1754 I Hate It (线段树)

    题意:略. 析:裸的线段树. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000") #include < ...

  10. Mybatis中模糊查询的各种写法

    1. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('%', #{text}), '%'); 2. 使用 ${...} ...