这两种写法都是可以的,出来的IL也一样,但是意义是不同的,后者相当于匿名方法,前者
更像是"匿名"的委托,其实这样写:
这个跟上面两种写法也是一样的效果,初次接触的时候,可能大家跟我一样会有些迷茫,Lamdba表达式到底该怎么用呢?
首先还是要弄清Lamdba表达式的几个特性:
我们知道, 当构造一个新的委托的时候, 他的构造器需要一个函数指针作参数,这个函数指针是委托类型的 实际上,当我们这样去new 一个委托的时候: MethodInvoker invoker = new MethodInvoker(MyFunc); "MyFunc" 就是一个委托,而不只是一个函数名的存在. 编译器将为这个构造函数生成一个匿名委托: MethodInvoker invoker = new MethodInvoker(delegate() { MyFunc(); }); 可以这样理解编译器的行为: 匿名方法其实也就是委托。
那么为什么我们可以这么写呢: MethodInvoker invoker = () => { Console.WriteLine(); }; 我们来看一看: 首先,这个委托的构造器需要一个委托参数,所以通常我们得这样写: MethodInvoker invoker = new MethodInvoker(delegate() { MyFunc(); }); 但是匿名的delegate 可以转化成函数指针 (void() target): 所以这样写是可以的:
从上面,我们可以看到一个复杂的委托是如何转化成简洁的Lambda表达式的。这对程序员来说无疑又是提高生产力的一个体现!
posted on 2007-09-26 13:42 Freesc Huang 阅读(631) 评论(0) 编辑 收藏 网摘 所属分类: C#
昵称: [登录] [注册]
主页:
邮箱:(仅博主可见)
验证码: 看不清,换一个
评论内容:
登录 注册
[使用Ctrl+Enter键快速提交评论]