我今天刚刚使用Action<T>()
并且它是兄弟Func<T>()
,现在这让我心烦意乱:
Func<T>
在official docs:
封装没有参数并返回值的方法 由TResult参数指定的类型。
因为即使评论提到这是一种方法(在C#中名义上没有函数,AFAIK),为什么C#的设计者不只是调用那个结构
Meth<T>
或Method<T>
?
可能是因为“Meth”的奇怪声音?但是方法怎么样呢?很明显呢?
答案 0 :(得分:9)
我认为“方法”在这里是一种实现细节 - 而函数的数学概念很常见。 (你经常听说代表被称为“函数指针”吗?)
请注意,即使在C#中也会显示“function”一词 - 匿名方法和lambda表达式都是“匿名函数”。
当你需要一个函数时,你可以使用Func<>
- 一个返回值的东西,可能是一些输入。你真的不关心它是否由方法支持;这只是你可以打电话的东西。
我会说Func<>
的文档在这里有些缺乏,而不是名称的选择。 (然后是类型系统阻止Func<void>
有效,这会使事情在许多情况下变得更简单 - 但这是另一回事。)
答案 1 :(得分:1)
我认为反过来了。一切都是函数,即使是void,MethodName也是一个具有void返回类型的函数。
答案 2 :(得分:1)
我一直认为术语方法和功能是相同的(根据我的一条评论)然而,这篇文章; Difference between a method and a function描述了差异所在;
方法是一段由关联名称调用的代码 用一个对象。在大多数方面,它与功能相同,除了 两个关键的区别。
- 隐式传递了名为
的对象- 它能够对类中包含的数据进行操作(记住一个对象是一个类的实例 - 该类是 定义,对象是该数据的实例)
我认为这是关键的区别; Func<T>
与对象无关,它只是一个功能“代码段”。 Func
本身会成为一个对象的事实会使事情略微混乱,但你会得到一般的想法。
答案 3 :(得分:0)
我认为它受到功能编程的启发。 Func
在整个LINQ中被大量用作“purely functional”方法 - 也就是说,返回给定输入的输出而没有任何可观察到的副作用的方法。