【发布时间】:2015-05-06 14:58:20
【问题描述】:
例如,您可以在 Visual Studio 2010 中使用 lambda 表达式,但仍以 .NET 2.0 为目标。
编译器如何解析 lambda 表达式以使用不包含此功能的旧框架?
【问题讨论】:
-
他们是匿名代表。代表从 1.0 开始就在那里,“匿名”只是意味着“名称由编译器分配”
-
@dman2306 不,lambda 不会编译成匿名方法。这两个功能都被编译成传统代码。
-
@dman2306 VB.NET 不包括匿名委托。
-
简单地说,lambda 表达式是一种语言特性,而不是运行时特性。编译器生成的 MSIL 不需要运行时的任何“新”(即晚于 .NET 2.0)特性。
-
@dman2306 从技术上讲,“匿名代表”这个短语并不合理。大概您指的是构造:
delegate { someMethod(); }。那是一个匿名方法,它构造一个委托。可悲的是,这里使用delegate关键字会引起一些混乱。匿名方法和 lambda 以及方法组和其他一些可能性都可用于创建委托,委托只是另一种类型的对象,恰好代表了在实例上调用方法的能力。