【发布时间】:2012-12-20 12:48:07
【问题描述】:
通过简单介绍一本书(领先一本书),有一件事引起了我的注意——lambda表达式定义:
lambda 表达式是一个未命名的方法,用于代替 委托实例。
代替委托实例???
委托实例是一个引用/封装目标方法的对象:
在以下示例中,右侧(lambda 表达式所在的位置)不是委托实例。这是一种方法。
TransformerDelegate t = SquareMethod;
所以定义应该已经更正/提及:
lambda 表达式是代替方法编写的未命名方法(!) 被委托变量引用。
TransformerDelegate sqr = x => x * x;
^
|
---------------+
|
this is the location for method/anonymous methods.
你明白我的意思吗?我说的对吗?
附言我确实了解了msdn的:(但想看看这本书是否有错误)
lambda 表达式是一个匿名函数,它可以包含 表达式和语句,可用于创建委托或 表达式树类型。
【问题讨论】:
-
你对这种微妙的问题有敏锐的眼光;你是正确的,措辞是不优雅和不准确的,即使它得到了正确的想法。如果您仔细阅读技术书籍,您会很快发现很多此类问题;例如,即使是经验丰富的作家也会将“对象”与“变量”混淆。我编辑过的唯一一本几乎每次都正确使用技术术语的书当然是C# in Depth。 :-)
-
@EricLippert 谢谢埃里克 :-)
-
Pedantry:在声明
TransformerDelegate t = SquareMethod;中,SquareMethod不是一个方法,它是一个方法组。 -
@phoog 为什么说它是一个方法组? TransformerDelegate type 有一个严格的定义。例如:
public delegate int TransformerDelegate (int a)它只会对整数执行。您的意思是它可以用较少派生的类型执行吗?但是 derived 比 int 少吗? -
Eric Lippert 可能会在这里纠正我,但我认为@phoog 的意思是 SquareMethod 这个名字可以是几个重载的方法,因此即使在这种情况下它只是一个方法,它也被称为 MethodGroup。 (只有一个重载的方法可以匹配委托签名,所以只有一个被添加到委托)