为什么Func不叫Meth

本文关键字:Meth 不叫 Func 为什么 | 更新日期: 2024-11-01 01:07:24

我刚刚用了Action<T>(),今天它是兄弟姐妹Func<T>(),这现在扰乱了我的思想:

Func<T>官方文档中是这样评论的:

封装没有参数的方法,并返回值 由 TResult 参数指定的类型。

既然连注释都提到这是一个方法(在C#中,名义上没有函数AFAIK这样的东西),为什么C#的设计者不只是调用该结构 Meth<T>还是Method<T>

可能是因为"冰毒"的奇怪声音吗?但是方法呢,这会非常清楚?

为什么Func<T>不叫Meth<T>

我认为"方法"在这里是一种实现细节 - 而函数的数学概念很常见。(你多久听说一次委托被描述为"函数指针"?

请注意,"函数"一词甚至在 C# 中也出现 - 匿名方法和 lambda 表达式都是"匿名函数"。

当你想要一个函数时,你会使用Func<> - 返回一个值的东西,可能给定一些输入。你并不真正关心它是否由方法支持;这只是你可以打电话的东西。

我想说的是,这里缺少Func<>的文档,而不是名称的选择。(然后是防止Func<void>有效的类型系统,这在许多情况下会使事情变得简单得多 - 但那是另一回事。

我认为情况

正好相反。一切都是一个函数,即使 void MethodName 是一个具有 void 返回类型的函数。

我一直认为术语方法和函数是一回事(根据我的一条评论),但是,这篇文章;方法和函数之间的差异描述了其中的差异;

方法是一段由关联的名称调用的代码 与对象。在大多数方面,它与函数相同,除了 有两个关键区别。

  • 隐式传递调用它的对象
  • 它能够对类中包含的数据进行操作(记住对象是类的实例 - 类是 定义,对象是该数据的实例)

我认为这是关键的区别; Func<T>不与对象相关联,它只是一个功能性的"代码段"。事实上,Func本身就是一个物体,这让事情稍微混乱了,但你得到了大致的想法。

我认为它的灵感来自函数式编程。 Func 在整个 LINQ 中作为"纯函数"方法大量使用,即返回给定输入的输出而没有任何可观察到的副作用的方法。