用lambda表达式声明委托
首先来分享一段代码:
Func<int, int, int> addMethod = (int x, int y) => (x + y);
熟悉的人肯定知道这句话是什么意思,可是不熟悉的人指定一看就头大,这就是会者不难,难者不会。
我来介绍一下上面那句话:
首先介绍赋值号(=)左面Func<int, int, int>,它相当于声明了一个委托private int deletegate TestAdd(int x ,int y ),前两个参数是相应方法的参数类型,最后一个为方法的返回类型。
那么上面的一句话就可以用委托的形式来实现:
private intdeletegate TestAdd(int x, int b );//定义一个委托,返回值为string类型 private int Add(int x,int y) { return x + y; } TestAdd t=new TestAdd(Add); t(4,8);
小结:我理解这句话就是简化了委托的声明,以及委托的实例化和调用。
但是我觉得和介绍的“Limbda表达式实际上就是一个方法,只不过该方法是匿名方法(即没有名称的方法)”有点区别,感觉可以直接用addMethod当方法用,比如如下:
int x1 = 5, y1 = 8;
MessageBox.Show("x1+y1=" + addMethod(x1, y1));
其实我理解是这样的,当上面的声明都是变量的时候和方法的声明没区别,但是让代码的可读性变难了,但是代码量减少了。
但是从委托的角度上看就和“匿名方法”挂钩了,而且简单了很多,Func<int, int, int>声明了一个委托,而且委托是匿名的,直接来一个委托的实例化,实例化addMethod,且右面的方法也是匿名的。
委托和方法的区别我在这里就不多说了,总之声明出来后就是一个委托实例,其中用到了匿名方法和匿名委托。
用lambda表达式声明委托的更多相关文章
- 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象
本文需要对C#里的LINQ.Lambda 表达式 .委托有一定了解. 在工作中,经常遇到需要对比两个集合的场景,如: 页面集合数据修改,需要保存到数据库 全量同步上游数据到本系统数据库 在这些场景中, ...
- c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)
c#封装DBHelper类 public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...
- lambda表达式与委托与线程初步谈论-基于刘铁锰视频观后操作
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- C#中通过Lambda表达式为委托传入更多的参数
如: DispatcherTimer dispatcherTimer = new DispatcherTimer(); dispatcherTimer.Tick += (o, e) => { d ...
- 委托、Lambda表达式和事件
1.1 引用方法 委托是寻址方法的 .NET 版本.委托是类型安全的类.它定义了返回类型和参数的类型.委托类不仅包含对方法的引用,也可以包含对多个方法的引用. Lambda 表达式 ...
- C# Note2:委托(delegate) & Lambda表达式 & 事件(event)
前言 本文主要讲述委托和Lambda表达式的基础知识,以及如何通过Lambda表达式实现委托调用,并阐述.NET如何将委托用作实现事件的方式. 参考:C#高级编程 1.什么是委托(delegate)? ...
- 深入学习C#匿名函数、委托、Lambda表达式、表达式树类型——Expression tree types
匿名函数 匿名函数(Anonymous Function)是表示“内联”方法定义的表达式.匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树类型(了解详情).匿名函数转换的计算取 ...
- 委托/lambda表达式/事件
委托 委托是执行安全的类,它的使用方式与类类似(即都需要定义再实例化),不同在于,类在实例化之后叫对象或类的实例,但委托在实例化后仍叫委托,委托可以把函数作为参数传递. 语法声明: delegate ...
- 委托和lambda表达式,Action和Func
1.为什么要用委托 我们为什么要有委托?任何东西存在即合理,不合理的也会被时间淘汰掉,委托既然存在肯定有存在的必要,我们来看一下什么时候可以用到委托. 接下来我们有个需求,就是调用一个方法,取出1-1 ...
随机推荐
- java的JCombobox实现中国省市区三级联动
源代码下载:点击下载源代码 用xml存储中国各大城市的数据. xml数据太多了就不贴上了,贴个图片: 要解释xml,添加了一个jdom.jar,上面的源代码下载里面有. 解释xml的类: packag ...
- Ultra-QuickSort(归并排序+离散化树状数组)
Ultra-QuickSort Time Limit: 7000MS Memory Limit: 65536K Total Submissions: 50517 Accepted: 18534 ...
- Centos6.4下tar包安装最新版Mysql5.6
1.下载 mysql:http://www.mysql.com/downloads/ (须要注冊ORACLE账号) 版本号:mysql-advanced-5.6.21-linux-glibc2.5-x ...
- OracleDBConsoleorcl无法启动
OracleDBConsoleorcl无法启动 向左转|向右转 提问者采纳 2010-10-13 19:40 我前几天刚解决了这个问题 这个错误原因是因为你的ip是动态获取的,你在安装Oracle时 ...
- Currency System in Geraldion (Codeforces 560A)
A Currency System in Geraldion Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64 ...
- php 学习笔记 数组3
15.使用数组 1).并集(union) array_merge(array1,array2,array3..) 函数把两个或多个数组合并为一个数组,后面覆盖前面 2). 交集(intersecti ...
- Week12(11月28日)
Part I:提问 =========================== 1.解读以下代码 $(document).ready(function(){ $('#btn1').click(fun ...
- Python 2.7 学习笔记 基本语法和函数定义
本文介绍下python的基本语法 一.变量定义 不需要说明类型,也不需要像js等脚本语言使用var等标识符.直接声明即可,如: num=1 说明:上面语句声明了一个变量num,并在声明时初始化值为 1 ...
- 【HTTP 2】启用 HTTP 2(Starting HTTP/2)
[HTTP 2]启用 HTTP 2(Starting HTTP/2) 四月 1, 2016 ~ LITECODES 前情提要 在上一篇文章<[HTTP 2]HTTP/2 协议概述(HTTP/2 ...
- 基于visual Studio2013解决算法导论之048红黑树
题目 红黑树 解决代码及点评 // 红黑树.cpp : 定义控制台应用程序的入口点. // #include <stdio.h> #include <stdlib.h> ...