匿名函数一个“内联”语句或表达式,可在需要委托类型的任何地方使用。可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数。

共有两种匿名函数:

Lambda表达式(在这里只举例在Lambda表达式在委托中的应用)

匿名方法

Lambda表达式是一种可用于创建委托或表达式目录树(以后再讨论)类型的匿名函数。通过使用Lambda表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。

若要创建Lambda表达式,需要在Lambda运算符 =>左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。

看一个例子:

        delegate int del(int i);
static void Main(string[] args)
{
//Lambda表达式用于创建委托
del myDelegate = x => x * x;
int j = myDelegate();
Console.WriteLine(j);
}

(input parameters)=>expression

仅当Lambda只有一个输入参数时,括号才是可选的;否则括号是必须的。括号内的两个或更多输入参数使用逗号加以分割:

(x, y)=>x==y

有时,编译器难以或无法推断输入类型,如果这种出现这种情况,你可以显示指定类型:

(int x, string s)=>s.length>x

使用空括号指定领个输入参数:

( )=>SomeMethod()

语句Lambda

语句Lamdba与表达式Lambda表达式类似,只是语句括在大括号中:

( input parameters ) => { statement ;}

看一个例子:

        delegate void TestDelegate(string s);
static void Main(string[] args)
{
//Lambda语句用于创建委托
TestDelegate myDel = n => { string s = n + " " + "World"; Console.WriteLine(s); };
myDel("Hello");
}

匿名方法

在2.0之前的C#版本中,声明委托的唯一方法是使用命名方法。C# 2.0引入了匿名方法,而在C# 3.0及更高版本中,Lambda表达式取代了匿名方法,作为编写内联代码的首先方式。

看一个例子:

        delegate void Printer(string s);
static void Main(string[] args)
{
//委托与匿名方法关联
Printer p = delegate (string st)
{
Console.WriteLine(st);
};
p("The delegate using the anonymous method is called."); //委托与命名方法关联
p = new Printer(DoWork);
p("The delegate using the named method is called.");
Console.ReadKey();
}
static void DoWork(string k)
{
Console.WriteLine(k);
}

匿名函数:Lambda表达式和匿名方法的更多相关文章

  1. 【Unity|C#】基础篇(9)——匿名函数 / Lambda表达式

    [学习资料] <C#图解教程>(第13章):https://www.cnblogs.com/moonache/p/7687551.html 电子书下载:https://pan.baidu. ...

  2. (28)C#委托,匿名函数,lambda表达式,事件

    一.委托 委托是一种用于封装命名和匿名方法的引用类型. 把方法当参数,传给另一个方法(这么说好理解,但实际上方法不能当参数,传入的是委托类型),委托是一种引用类型,委托里包含很多方法的引用 创建的方法 ...

  3. Qt中使用匿名函数lambda表达式

    一.为什么要使用匿名函数lamdba 首先,lambda表达式可以使代码变得简单,C++中,一个lambda表达式表示一个可调用的代码单元.如代码: #include <QCoreApplica ...

  4. 匿名函数 lambda表达式(lambda expression)

    阅读g2log时,发现有两行代码居然看不懂. 1. auto bg_call =  [this, log_directory]() {return pimpl_->backgroundChang ...

  5. Python匿名函数——lambda表达式

    如果要定义的函数很简单,一个return语句就能搞定,可以使用lambda表达式来定义, lambda表达式的语法如下: lambda parameters: expression lambda表达式 ...

  6. python做中学(八)匿名函数lambda的用法

    匿名函数,顾名思义即没有名称的函数,和def定义的函数的最大区别在于匿名函数创建后返回函数本身(即匿名函数不需要return来返回值),表达式本身结果就是返回值,而def创建后则赋值给一个变量名,在P ...

  7. python中匿名函数lambda如何用

    python中经常用到的一个函数:匿名函数lambda ,什么是匿名函数?匿名函数的意义是什么?匿名函数怎么样用?(疑问三连,what,why,how) 一,什么是匿名函数? python中没有名字的 ...

  8. Lambda表达式与匿名方法

    在C#2中,由于有了方法组,匿名方法,类型的协变和抗变,使得运用delegate变得很容易,在注册事件时代码变得简单易读,但是在C# 2中,代码仍然有点臃肿,大块的匿名方法会降低代码的可读性,一般我们 ...

  9. 委托学习过程及委托、Lambda表达式和匿名方法的关系总结及事件总结

    第一章,当开始学习委托的时候,我们会问什么是委托?为什么要学习委托? 一,什么是委托? 委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法, ...

  10. kotlin之lambda表达式和匿名函数

    lambda表达式,称为匿名函数,是一种函数字面值,也就是没有声明的函数,但可以作为表达式传递出去. 函数类型: 对于接受另一个函数的作为自己的参数,必须针对这个参数指定一个函数的类型如 fun &l ...

随机推荐

  1. easyui添加生成tab和子页面jsp

    <!DOCTYPE html><html> <head> <meta charset="utf-8"> <title>& ...

  2. 关于web前端的学习路线

    第一阶段: HTML+CSS:HTML进阶.CSS进阶.div+css布局.HTML+css整站开发. JavaScript基础:Js基础教程.js内置对象常用方法.常见DOM树操作大全.ECMAsc ...

  3. 读取Properties键值对

    public class CommonFunc { /** * 取properties文件中的键值对 */ public static String getProperties(String para ...

  4. 【BZOJ 4547】【HDU 5157】小奇的集合

    http://www.lydsy.com/JudgeOnline/problem.php?id=4547 本蒟蒻并不会矩乘求Fibonacci数列前缀和,所以果断分块打表,常数竟然比矩乘要小! PS: ...

  5. 堆 poj 2010

    选n个人从c个中 花费不超过f c个人的成绩和花费 求分数中位数最大 n是奇数 显然中位数是n/2+1 ~c-n/2之间的(假如存在的话) 用大顶堆维护前n/2个小的花费 求出以这个人为中位数的花费 ...

  6. python日常-list and dict

    什么是list: list 觉得算是python日常编程中用的最多的python自带的数据结构了.但是python重的list跟其他语言中的并不相同. 少年..不知道你听说过python中的appen ...

  7. Xmanager注册吗

    xmanager4.0注册吗 --

  8. Android进程回收机制LMK(Low Memory Killer)

    熟悉Android系统的童鞋都知道,系统出于体验和性能上的考虑,app在退到后台时系统并不会真正的kill掉这个进程,而是将其缓存起来.打开的应用越多,后台缓存的进程也越多.在系统内存不足的情况下,系 ...

  9. Android消息机制之ThreadLocal的工作原理

    来源: http://blog.csdn.net/singwhatiwanna/article/details/48350919 很多人认为Handler的作用是更新UI,这说的的确没错,但是更新UI ...

  10. python 模块的介绍(一)

    模块让你能够有逻辑地组织你的Python代码段. 把相关的代码分配到一个 模块里能让你的代码更好用,更易懂. 模块也是Python对象,具有随机的名字属性用来绑定或引用. 简单地说,模块就是一个保存了 ...