通过使用匿名委托(匿名方法),使编程变得更加灵活,有关委托与匿名委托请参考我的前一篇Blog《委托与匿名委托》

继续之前示例,代码如下:

static void Main(string[] args)
{ Worker.TwoNumberHandleMethodDelegate method = delegate(int a, int b)
{
return a + b;
};
Worker worker = new Worker();
int result = worker.HandleTwoNumber(, ,method); Console.WriteLine(String.Format("Result:{0}", result)); Console.ReadLine();
}

上述程序worker将按照Main给定的参数与计算方式(method),计算出结果返回。根据等效性代码可以进一步简化,如下:

 static void Main(string[] args)
{
Worker worker = new Worker();
int result = worker.HandleTwoNumber(, , delegate (int a, int b)
{
return a + b;
}); Console.WriteLine(String.Format("Result:{0}", result)); Console.ReadLine();
}

看到此处有过js、jquery开发经验的朋友可能会突感亲切,哦...匿名函数。在jquery中到处都用的$("#id").click(function(){.........})。

C#中对于匿名委托在使用时可以进一步精简,再精简的结果就变成了表达式,称为Lambda表达式。

static void Main(string[] args)
{ Worker.TwoNumberHandleMethodDelegate method = delegate(int a, int b)
{
return a + b;
};
}

Lambda表达式表述:

static void Main(string[] args)
{ Worker.TwoNumberHandleMethodDelegate method = (a, b)=>
{
return a + b;
};
}

C# Lambda表达式使用 => 分为前后两部分,(a, b) 为参数列表,{....}为方法体。

 static void Main(string[] args)
{
Worker worker = new Worker();
int result = worker.HandleTwoNumber(, , (a, b) =>
{
return a + b;
}); Console.WriteLine(String.Format("Result:{0}", result)); Console.ReadLine();
}

下面给出方法与Lambda表达式转换对照

private void A1()
{
Console.WriteLine("....");
}
//Lambda
()=>{Console.WriteLine("....");};
//如果方法体代码只有一句,如上还可省去方法体大括号
()=>Console.WriteLine("....");
private string A2(int a, int b)
{
return String.Format("{0}+{1}={2}", a, b, a + b);
}
//如上示例可简化为
(a,b)=>{return String.Format("{0}+{1}={2}", a, b, a + b);}
//因为方法体只有一句,可进一步简化
(a,b)=> String.Format("{0}+{1}={2}", a, b, a + b);
//此时注意return应该去掉,C#编译器自动识别=>做返回值
private string A3(int a)
{
return String.Format("{0}", a);
}
//上面示例可简化为
(a)=>String.Format("{0}", a);
//如果参数列表只有一个参数,参数列表的()可以去掉,上面进一步简化为
a=>String.Format("{0}", a);

通过这篇文章你可能已经意识到在C#中,方法、委托、匿名方法,lambda表达式并无明显区分边界,它们之间可以灵活转化。在实际开发中关于委托的知识点非常多,如委托与事件。如果时间允许,希望能把委托深化的文章写一下。

匿名委托与Lambda表达式的更多相关文章

  1. 委托、匿名委托、Lambda 表达式、Expression表达式树之刨根问底

    本篇不是对标题所述之概念的入门文章,重点在阐述它们的异同点和应用场景.各位看官,这里就不啰嗦了,直接上代码. 首先定义一个泛型委托类型,如下: public delegate T Function&l ...

  2. C#,委托,匿名委托,Lambda表达式

    1. 委托是什么? (1) 从数据结构来讲,委托是和类一样是一种用户自定义类型.  (2) 从设计模式来讲,委托(类)提供了方法(对象)的抽象.概括的说:委托是方法的抽象. 2. 委托类型的定义: 委 ...

  3. 委托、匿名委托和lambda表达式

    1.委托 在.NET中,委托有点类似于C/C++中的函数指针,但与指针不同的是,委托是一种安全的类型,那么我们就以实现两个数的差为例,先声明一个成员方法: public int CompareTwoV ...

  4. C#学习笔记(28)——匿名委托和Lambda表达式

    说明(2017-11-21 18:51:32): 1. 例子为求1~100的和,答案应该是5050(小学学算盘的时候,我爹就让我算,从1拨到100是多少呀?当时的我年幼无知,还不知道高斯小时候的故事, ...

  5. 帮助理解委托、匿名委托、Lambda表达式还有事件

    写了一个小程序,能够很好的认识到这三个的用法 namespace Lambda { /// <summary> /// 实现根据指定运算形式 输出结果 /// </summary&g ...

  6. C#中匿名委托以及Lambda表达式的学习笔记

    一. C#从1.0到4.0, 随着Linq,泛型的支持,代码越来越简单优雅 , , , , , , , , , }; IEnumerable< select n; newNums = newNu ...

  7. C# 委托 (一)—— 委托、 泛型委托与Lambda表达式

    C# 委托 (一)—— 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992   版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此 ...

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

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

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

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

随机推荐

  1. Java 9 揭秘(16. 虚拟机栈遍历)

    Tips 做一个终身学习的人. 在本章中,主要介绍以下内容: 什么是虚拟机栈(JVM Stack)和栈帧(Stack Frame) 如何在JDK 9之前遍历一个线程的栈 在JDK 9中如何使用Stac ...

  2. 【Owin 学习系列】1. 第一个 Owin 程序

    IIS 中的 Owin 在 IIS 里面部署 Owin,既能得到 Owin 管道模型的灵活性和模块特性,也能很好地利用 IIS 成熟的配置,Owin 程序将会跑在 ASP.NET request 的管 ...

  3. golang windows 安装方法

    编译器下载链接:https://golang.org/dl/ 默认安装到C盘,不用修改.   添加环境变量:     配置环境变量:   注:C:\mygo\bin 配置这个后,则可以直接在 Dos ...

  4. Oracle 11g RAC 修改各类IP地址

    Oracle 11g RAC 修改各类IP地址 首先,我们都知道Oracle 11g RAC中的IP主要有:Public IP.VIP.SCAN VIP.Private IP这几种. 一般这类改IP地 ...

  5. Scrapy提取多个标签的text

    对于要提取嵌套标签所有内容的情况, 使用string或//text(), 注意两者区别 >>> from scrapy import Selector >>> &g ...

  6. Python操作文件和目录

    Python操作文件和目录 读写文件比较简单,有一点特别注意就好了 windows下Python默认打开的文件以gbk解码,而一般我们的文件是utf-8编码的,所以如果文本含有中文,就会出现异常或者乱 ...

  7. SMBLoris windows拒绝服务漏洞

    在美国拉斯维加斯举行的2017年度DEF CON黑客大会上,安全研究人员公布了Windows系统上的一个长达20年没有发现的漏洞,该漏洞名为"SMBLoris",黑客可以轻松的使用 ...

  8. oracle数据库中的四种循环

    [sql]  DECLARE  x number;  BEGIN  x:=9;  <<repeat_loop>>  --循环点  x:=x-1;  DBMS_OUTPUT.PU ...

  9. UITabbarController左右滑动切换标签页

    UITabbarController左右滑动切换标签页 每个Tabbar ViewController都要添加如下代码,建议在基类中添加:ViewDidLoadUISwipeGestureRecogn ...

  10. .net 设置webbrowser控件使用的IE版本

    当我们在使用.net的Webbrowser控件时,发现webbrowser展示的内容和我们用浏览器展示的内容不一致,甚至出现:'JSON' is undefined. 原因是webbrowser使用的 ...