关于拉姆达,委托,匿名函数
相信您一定听过这样的几个名词,拉姆达,委托,匿名函数。这三个名词之间有着一定的联系,至于他们的定义百度有很多,我来说说我理解的它们之间的联系和区别。
首先是匿名函数,在c# 2.0时加入了匿名函数。基本上是在定义委托的时候使用匿名函数。如下代码:
//声明一个委托类型
delegate void DelTest();
public void DoSomeThing()
{DelTest DelT2 = delegate(){System.Console.WriteLine("我是一个匿名方法!");};
}
delegate()={ //代码体 } 这样就是匿名函数。到了C# 3.0 时,有了拉姆达表达式,匿名函数就有了第二种方式。如下代码:
//声明一个委托类型
delegate void DelTest();
public void DoSomeThing()
{//到了C#3.0时代,又增加了一种更简便的拉姆表达式。DelTest DelT3 = () => { System.Console.WriteLine("其实,,,我也是一种匿名方法!");};
}
所有,匿名函数有两种:
1> 通过delegate 关键字定义。
2> 通过拉姆达表达式定义。
在有了匿名函数的情况下,定义委托变得更加的简洁明了。从C#1.0到 C#3.0 ,委托经过了这样的定义过程:
//声明一个委托类型delegate void DelTest();public void Func1(){System.Console.WriteLine("我是一个即将被交由委托执行的方法!");}public void DoSomeThing(){//在C#1.0时代,委托是这样定义的。DelTest DelT = new DelTest(Func1);//到了C#2.0时代,有了匿名函数。通过匿名函数使代码更简洁。DelTest DelT2 = delegate(){System.Console.WriteLine("我是一个匿名方法!");};//到了C#3.0时代,又增加了一种更简便的拉姆表达式。DelTest DelT3 = () => { System.Console.WriteLine("其实,,,我也是一种匿名方法!"); };}
后来,有了一种新的泛型委托Func<T> 和Action<T>
Func<string> Func1 = () => { return "我是一个有返回值的泛型委托,如果我有多个参数传入,最后一个就是我的返回类型"; };Func<string, int> Func2 = (string a) => { return 1; };Action<string> Act1 = (string a) => { /*我是只有参数没有返回值的*/ };Action<string, int> Act2 = (string a, int b) => { /*我是只有参数没有返回值的*/ };
Func<T>和Action<T> 的区别:
相同:Func和Action都是泛型委托,参数都是可以多个。
不同:Func 是有返回值,当参数任意个时,最后一个就是返回值的类型。Action只有入参,没有出参,没有返回值。
关于拉姆达,委托,匿名函数相关推荐
- 多线程 委托 匿名函数 拉姆达 事件
多线程 using System; using System.Threading;//引用的命名空间 这个命名空间有C#对线程的各种操作namespace aaa//瞎起的名字哈哈 {class Pr ...
- 匿名函数 和 拉姆达表达式
匿名函数 匿名方法是创建与特定委托实例相关联的未命名代码块的一种方法.可以通过在代码块后面跟上delegate关键字来创建匿名方法. delegate void print();delegate st ...
- C# 匿名方法和拉姆达表达式
"` "`代码如下: using System; using System.Collections.Generic; using System.Linq; using System ...
- 委托、lamda表达式..委托概念-匿名函数-泛型委托-Lamda表达式-多播委托
委托 一.什么是委托? 将一个方法作为参数传递给另一个方法(参数类型为委托delegate). 声明一个委托类型. 委托所指向的函数必须跟委托具有相同的的签名(参数个数.参数类型.返回值一样). ...
- C#中委托的发展与匿名函数
匿名函数(C# 编程指南) 匿名函数是一个"内联"语句或表达式,可在需要委托类型的任何地方使用. 可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数 ...
- C#委托(匿名函数)的各种变形写法
C#委托(匿名函数)的各种变形写法 static void TestDelegate() {//类C++11风格:指定初始化容量20,使用初始化列表给部分成员赋值var lst = new List& ...
- [深入学习C#]匿名函数、委托和Lambda表达式
转载自诗人江湖老,原文地址 匿名函数(Anonymous Function)是表示"内联"方法定义的表达式.匿名函数本身及其内部没有值或者类型,但是可以转换为兼容的委托或者表达式树 ...
- 匿名函数,Lambda表达式,委托
C# 委托(Delegate) C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托(Delegate) 是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变.委托( ...
- C#拉姆达(=)表达式
前言: 之前小猪曾经分享过自己对C#委托的一点理解 其实在使用委托的过程中我们会大量的使用拉姆达(=>)表达式 介绍: "Lambda表达式"是一个匿名函数,是一种高效的类似 ...
最新文章
- java程序设计案例教程 钱银中_《Java程序设计案例教程》【价格 目录 书评 正版】_中国图书网...
- python turtle setheading_一文掌握Python绘图库Turtle的使用
- 全部关于测试–第1部分
- 平均每天呆实验室14小时,本科女生一作发表PNAS,直博北大!
- 人生苦短,Python之父要解开这个困惑
- day14(xml 编写及解析)
- mifare classic 2.2.3中文_Adobe Lightroom Classic CC 2019 v8.4.1 中文完整直装版
- Rose软件安装教程
- robocode_Robocode策略
- Linux在Ubuntu下安装TFTP
- 卡牌大师怎么玩_LOL卡牌大师技巧 卡牌大师攻略
- JAVA学习笔记之J2SDK主要包介绍 (马士兵 教学视频)
- window+mysql+免安装_mysql 5.7.18 免安装版window配置方法
- python爬虫笔记---1.13---第一篇
- Direct3D 11 Devices 之 Using Direct3D 11 feature data to supplement Direct3D feature levels
- 从WinMain函数看Windows程序内部运行机制
- Android多分辨率适配框架(1)— 核心基础
- 体验卓越品质 新贵Whql认证鼠标
- 基于JSP的在线学习网站 的设计与实现
- 本乃后山人,欲做堂前客。
热门文章
- [libxml2]_[C/C++]_[使用libxml2读取分析xml文件]
- 在网页调用微信支付,并解决IOS调用提示“缺少参数timeStamp”问题
- 车辆工程(1)——线性二自由度汽车模型的运动方程
- 《ROS机器人开发实践》使用RoboWare创建talker和listener程序
- 第三方登录之微信登录
- 海思平台(hi3559av100)异构多系统的使用Linux(2*A53+2*A73)+liteos(A53)+liteos(M7)
- [转载] 怎样应对一般的面试---Star 法则 - towerman
- Windows cmd命令(五)find和findstr指令
- EasyExcel · 写excel
- 02 BGP地址聚合