Lambda应用设计模式

Lambda应用设计模式

ID:39465146

大小:76.50 KB

页数:19页

时间:2019-07-04

Lambda应用设计模式_第1页
Lambda应用设计模式_第2页
Lambda应用设计模式_第3页
Lambda应用设计模式_第4页
Lambda应用设计模式_第5页
资源描述:

《Lambda应用设计模式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Lambda应用设计模式在使用Lambda表达式时,我们常会碰到一些典型的应用场景,而从常用场景中抽取出来的应用方式可以描述为应用模式。这些模式可能不全是新的模式,有的参考自JavaScript的设计模式,但至少我看到了一些人为它们打上了名字标签。无论名字的好与坏,我还是决定给这些模式进行命名,至少这些名字很具有描述性。同时我也会给出这些模式的可用性、强大的部分和危险的部分。提前先说明:绝大多数模式是非常强大的,但有可能在代码中引入些潜在的Bug。所以,慎用。老生常谈了。事实上,在.NET的第一个版本中就已经支持回调模式了,但

2、形式有所不同。现在通过Lambda表达式中的闭包和局部变量捕获,这个功能变得越来越有趣了。现在我们的代码可以类似于:复制代码1voidCreateTextBox()2{3vartb=newTextBox();4tb.IsReadOnly=true;5tb.Text="Pleasewait...";6DoSomeStuff(()=>7{8tb.Text=string.Empty;9tb.IsReadOnly=false;10});11}1213voidDoSomeStuff(Actioncallback)14{15//Dosom

3、estuff-asynchronouswouldbehelpful...16callback();17}复制代码对于JavaScript开发人员,这个模式已经没什么新鲜的了。而且通常我们在大量的使用这种模式,因为其非常的有用。例如我们可以使用时间处理器作为参数来处理AJAX相关的事件等。在LINQ中,我们也使用了这个模式,例如LINQ中的Where会在每次迭代中回调查询函数。这些仅是些能够说明回调模式非常有用的简单的示例。在.NET中,通常推荐使用事件回调机制。原因有两点,一是已经提供了特殊的关键字和类型模式(有两个参数,一个

4、是发送者,一个数事件参数,而发送者通常是object类型,而事件参数通常从EventArgs继承),同时通过使用+=和-+操作符,也提供了调用多个方法的机会。函数作为返回值(ReturningFunctions)就像常见的函数一样,Lambda表达式可以返回一个函数指针(委托实例)。这就意味着我们能够使用一个Lambda表达式来创建并返回另一个Lambda表达式。这种行为在很多场景下都是非常有用的。我们先来看下面这个例子:复制代码1FuncSayMyName(stringlanguage)2{3s

5、witch(language.ToLower())4{5case"fr":6returnname=>7{8return"Jem'appelle"+name+".";9};10case"de":11returnname=>12{13return"MeinNameist"+name+".";14};15default:16returnname=>17{18return"Mynameis"+name+".";19};20}21}2223voidMain()24{25varlang="de";26//Getlanguage-e.g.b

6、ycurrentOSsettings27varsmn=SayMyName(lang);28varname=Console.ReadLine();29varsentence=smn(name);30Console.WriteLine(sentence);31}复制代码这段代码可以写的更简洁些。如果请求的语言类型未找到,我们可以直接抛出一个异常,以此来避免返回一个默认值。当然,出于演示的目的,这个例子展示了类似于一种函数工厂。另外一种方式是引入Hashtable,或者更好的Dictionary类型。复制代码1static

7、classTranslations2{3staticreadonlyDictionary>smnFunctions4=newDictionary>();56staticTranslations()7{8smnFunctions.Add("fr",name=>"Jem'appelle"+name+".");9smnFunctions.Add("de",name=>"MeinNameist"+name+".");10smnF

8、unctions.Add("en",name=>"Mynameis"+name+".");11}1213publicstaticFuncGetSayMyName(stringlanguage)14{15//Checkifthelanguageis

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。