为什么Func <t>不称为Meth <t>?</t> </t>

时间:2013-12-18 09:55:50

标签: c# methods naming

我今天刚刚使用Action<T>()并且它是兄弟Func<T>(),现在这让我心烦意乱:

Func<T>official docs

中的评论如下
  

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

因为即使评论提到这是一种方法(在C#中名义上没有函数,AFAIK),为什么C#的设计者不只是调用那个结构 Meth<T>Method<T>

可能是因为“Meth”的奇怪声音?但是方法怎么样呢?很明显呢?

4 个答案:

答案 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”方法 - 也就是说,返回给定输入的输出而没有任何可观察到的副作用的方法。