委托、Lambda表达式、Action、Func、匿名函数

5

我只是想核实以下内容的理解

  • Delegate - 方法签名
  • Lambdas - 匿名函数
  • Anonymous Function - 就是匿名函数
  • Action - 返回空值的匿名函数
  • Func - 返回值的匿名函数

嗯...它们都做类似的事情,怎么定义和知道何时使用每个?

抱歉,我的解释不太好


1
这个问题非常广泛,任何试图回答它的尝试都只会引发更多的问题。先了解基础知识,当你真正面临问题或对此特定用途有疑问时再提出问题。 - Øyvind Bråthen
3个回答

9
  • Delegate - 它不是一个方法签名。它是一种封装方法的类型。因此,委托声明应该具有与其要封装的方法类似的签名。当您想将方法传递给另一个函数时,请使用委托。详情请参阅这里这里

  • Lambdas - 缩写和更表达式的方式编写匿名函数。 但不仅如此,Lambda表达式还可以转换为表达式树。详情请参阅这里

  • Anonymous Function - 就是这样。

  • Action - 它是一个可以封装返回空的函数的委托。因此,您应该将其视为 封装操作的类型,并在需要传递操作时使用它。

  • Func - 可以封装返回值的函数的委托。但您应该将其视为 封装变换的类型,并在需要传递变换时使用它。


我在想,为什么我不能传递一个委托而不是一个 ActionFunc 呢? - Jiew Meng
Action和Func是由.Net提供的委托。所以当你创建一个Action实例,比如Action myAction = myMethod;然后传递它,你实际上是在传递一个委托。 - Unmesh Kondolikar

4

ActionFunc只是Delegate的特殊情况。 Delegate本身是引用方法并可用于调用它的东西。


3

不要试图将C#和这些特性联系起来。同时,由于对你的问题没有严格实用的答案,也不要解释。

从函数式编程的角度出发,例如尝试学习F#以了解何时何地使用lambda表达式(在函数式语言中实际上随处可见),然后你会更好地理解事物。

这将开阔你的思路,并使你以不同的方式思考命令式编程或混合语言如C#。


1
我看了一些F#的视频,特别是PDC08上Luca Bolognese的那个视频,非常有趣。但是我并没有真正理解太多,所以我停止观看了,也许我应该再去看看它们。 - Jiew Meng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接