【问题标题】:Delegates, Lambdas, Action, Func, Anonymous Functions委托、Lambda、Action、Func、匿名函数
【发布时间】:2023-03-31 16:58:01
【问题描述】:

我只是想验证一下我对以下内容的理解

  • 委托 - 方法签名
  • Lambdas - 匿名函数
  • 匿名函数 - 就是这样
  • Action - 一个不返回任何内容的匿名函数
  • Func - 返回一些东西的匿名函数

嗯...它们都做类似的事情,你如何定义和知道何时使用它们?

对不起,我解释得不好

【问题讨论】:

  • 这个范围太广了,任何回答这个问题的尝试都会产生更多的问题。阅读基础知识,而不是在您实际遇到问题或对它的特定用途有疑问时提出问题。

标签: c# lambda delegates anonymous-function


【解决方案1】:
  • 委托 - 它不是方法签名。 It is a type which encapsulates a method。因此,委托声明应该具有类似于它要封装的方法的签名。 When to use Delegate - whenever you want to pass a method to another function. 更多信息请参见thisthis

  • Lambdas - 编写匿名函数的简写和更具表现力的方式。但还有更多。 lambda 表达式也可以转换为表达式树。更多信息请见this

  • 匿名函数 - 是的 .. 就是这样

  • Action - 它是一个委托,可以封装一个不返回任何内容的函数。所以你应该把它想象成a type that can encapsulate an action,当你需要传递一个动作时使用它。

  • Func - 可以封装返回某些内容的函数的委托。但是您应该将其视为a type that can encapsulate a transformation,并在您想要传递转换时使用。

【讨论】:

  • 我想知道,为什么我不能传递一个代表而不是 ActionFunc
  • Action 和 Func 是 .Net 提供的代表。因此,当您创建 Action 的实例时,例如 Action myAction = myMethod;并传递它你实际上是传递一个委托。
【解决方案2】:

ActionFunc 只是Delegate 的特例。委托本身就是引用一个方法的东西,可以用来调用它。

【讨论】:

    【解决方案3】:

    不要试图看到 C# + 这些特性。也因为您的问题没有严格的务实答案。

    从函数式编程的角度开始,例如尝试学习 F# 以了解 lambda 的用途和时间(实际上在函数式语言中无处不在),然后你就会更好地理解事物。

    它会打开你的思路,让你对命令式编程或 C# 等混合语言有不同的看法。

    【讨论】:

    • 我看了一些 F# 视频,特别有趣。 the one by Luca Bolognese@PDC08。但我并没有真正得到多少,然后我不再看那些了,也许我应该重新开始看@他们