为什么Func不叫Meth
本文关键字:Meth 不叫 Func 为什么 | 更新日期: 2024-11-01 01:07:24
我刚刚用了Action<T>()
,今天它是兄弟姐妹Func<T>()
,这现在扰乱了我的思想:
Func<T>
官方文档中是这样评论的:
封装没有参数的方法,并返回值 由 TResult 参数指定的类型。
既然连注释都提到这是一个方法(在C#中,名义上没有函数AFAIK这样的东西),为什么C#的设计者不只是调用该结构 Meth<T>
还是Method<T>
?
可能是因为"冰毒"的奇怪声音吗?但是方法呢,这会非常清楚?
我认为"方法"在这里是一种实现细节 - 而函数的数学概念很常见。(你多久听说一次委托被描述为"函数指针"?
请注意,"函数"一词甚至在 C# 中也出现 - 匿名方法和 lambda 表达式都是"匿名函数"。
当你想要一个函数时,你会使用Func<>
- 返回一个值的东西,可能给定一些输入。你并不真正关心它是否由方法支持;这只是你可以打电话的东西。
我想说的是,这里缺少Func<>
的文档,而不是名称的选择。(然后是防止Func<void>
有效的类型系统,这在许多情况下会使事情变得简单得多 - 但那是另一回事。
正好相反。一切都是一个函数,即使 void MethodName 是一个具有 void 返回类型的函数。
我一直认为术语方法和函数是一回事(根据我的一条评论),但是,这篇文章;方法和函数之间的差异描述了其中的差异;
方法是一段由关联的名称调用的代码 与对象。在大多数方面,它与函数相同,除了 有两个关键区别。
它
- 隐式传递调用它的对象
- 它能够对类中包含的数据进行操作(记住对象是类的实例 - 类是 定义,对象是该数据的实例)
我认为这是关键的区别; Func<T>
不与对象相关联,它只是一个功能性的"代码段"。事实上,Func
本身就是一个物体,这让事情稍微混乱了,但你得到了大致的想法。
我认为它的灵感来自函数式编程。 Func
在整个 LINQ 中作为"纯函数"方法大量使用,即返回给定输入的输出而没有任何可观察到的副作用的方法。