C#中的匿名函数和闭包
来源:互联网 发布:泉州专业淘宝拍摄 编辑:程序博客网 时间:2024/04/29 13:11
C# 支持用于调用一个或多个方法的委托 (delegate)。委托提供运算符和方法来添加或删除目标方法,它也可以在整个 .NET 框架中广泛地用于事件、回调、异步调用、多线程等。匿名函数其实从简单的介绍的话,是没有名字的函数,更严格一些,匿名函数是闭包的一个实现,也就是C#通过兰步达表达式(匿名函数)实现了闭包,通过闭包,可以改变局部变量的声明周期,因此闭包有很多很特殊和奇妙的引用。
闭包的概念:主要是指由函数以及与函数相关的上下文环境组成的实体,通过闭包,函数与上下文变量之间建立起关联关系,上下文变量的状态可以在函数的多次调用过程中持久保持,从作用域的角度而言,私有变量的生存期被延长,函数调用所生成的值在下次调用时仍被保持。从安全性的角度而言,闭包有利于信息隐蔽,私有变量只在该函数内可见。
形成闭包的条件:嵌套定义的函数、匿名函数、将函数作为参数或者返回值。
常规委托:
class SomeClass{ delegate void SomeDelegate(); public void InvokeMethod() { SomeDelegate del = new SomeDelegate(SomeMethod); del(); } void SomeMethod() { MessageBox.Show("Hello"); }}
可以用一个匿名方法来定义和实现这个方法:
class SomeClass{ delegate void SomeDelegate(); public void InvokeMethod() { SomeDelegate del = delegate() { MessageBox.Show("Hello"); }; del(); }}
=============================================================class SomeClass{ delegate void SomeDelegate(); public void SomeMethod() { InvokeDelegate(delegate(){MessageBox.Show("Hello");}); } void InvokeDelegate(SomeDelegate del) { del(); }}将参数传递到匿名方法:
class SomeClass{ delegate void SomeDelegate(string str); public void InvokeMethod() { SomeDelegate del = delegate(string str) { MessageBox.Show(str); }; del("Hello"); }} 一般的匿名方法:class SomeClass<T>{ delegate void SomeDelegate(T t); public void InvokeMethod(T t) { SomeDelegate del = delegate(T item){...} del(t); }}注意点:1.如果匿名方法没有参数,则可以在 delegate 关键字后面使用一对空括号:class SomeClass{delegate void SomeDelegate();public void InvokeMethod(){SomeDelegate del = delegate(){MessageBox.Show("Hello");};del();}}2.如果您将 delegate 关键字与后面的空括号一起忽略,则您将定义一种特殊的匿名方法,它可以指派给具有任何签名的任何委托:class SomeClass{ delegate void SomeDelegate(string str); public void InvokeMethod() { SomeDelegate del = delegate { MessageBox.Show("Hello"); }; del("Parameter is ignored"); }}
0 0
- C#中的匿名函数和闭包
- php中的匿名函数和闭包
- JS中的匿名函数和闭包
- php中的匿名函数和闭包
- 匿名函数中的闭包
- 匿名函数和闭包
- 匿名函数和闭包
- 匿名函数和闭包
- 闭包和匿名函数
- 匿名函数和闭包
- 匿名函数和闭包
- 匿名函数和闭包
- 匿名函数和闭包
- 闭包和匿名函数
- 匿名函数和闭包
- php中的匿名函数和闭包(closure)
- js中的匿名函数和闭包总结篇
- php中的匿名函数和闭包(closure)
- iOS7开发的新特性之AirDrop
- 鼠标点击选择三维图形中一个点
- 俺的招聘经验[4]:通过笔试答题能看出啥?
- Http message handle/Delegating handler
- NSArray和NSDictionary
- C#中的匿名函数和闭包
- View not attached to window manager解决方案
- 关于Json返回null的问题
- SQL语句字符串处理大全(转)
- 数据晒选
- 关于C/C++中TRACE的那些事
- 数据结构之简单表达式计算器(读入中缀转后缀,通过后缀计算结果)
- 多元线性回归模型的有偏估计
- oracle 查询被锁进程