.net中Method和function之间的区别是什么

时间:2012-11-29 16:52:25

标签: c# oop class c#-4.0 c#-3.0

我在Google上搜索方法和功能之间的区别,我得到了两个答案。

答案-1

方法是非返回类型,如下所示

void Method()
{
}

其中Function是一个返回类型,如下所示

int Method()
{
}

答案 - 2

这两个词没有区别。

查询 - 哪个是正确的还是有第三件事?

8 个答案:

答案 0 :(得分:5)

没有区别。

在c#和java中,通常称它们为方法。在javascript和c ++中,它们通常被称为函数

无论哪种方式,人们都会知道你的意思


答案1,如果我是一个全新的程序员,并且我被要求推测差异,那么答案1可能就是我想出的。将函数的数学定义作为输入确定输出的过程

答案 1 :(得分:2)

我认为你真正要问的是C#中函数和动作(两者都是方法)之间的区别是什么。

差异与如何处理空白有关:这很好地解释了https://softwareengineering.stackexchange.com/questions/131036/why-is-void-not-allowed-as-a-generic-type-in-c

我将完整发布Eric Lippert的答案以节省点击次数:

  

“void”的根本问题在于它与任何其他返回类型的含义并不相同。 “无效”是指“如果这种方法   返回然后它根本不返回任何值。“不为null; null是一个值。   它不会返回任何值。

     

这真的搞砸了类型系统。类型系统本质上是一个   系统,用于对哪些操作有效进行逻辑推断   关于特定的价值; void返回方法不返回值,   所以问题是“什么操作对这件事有效?”不要做   任何意义上的。对于进行操作没有“事情”,   有效或无效。

     

此外,这会让运行时变得更加激烈。互联网   runtine是虚拟执行系统的一个实现,它是   指定为堆栈计算机。也就是说,虚拟机所在的地方   操作的特点是它们对a的影响   评估堆栈。 (当然在实践中机器将是   在具有堆栈和寄存器的机器上实现,但是   虚拟执行系统只是一个堆栈。)一个调用的影响   void方法与调用的效果根本不同   非虚方法;一个非虚方法总是把东西放在上面   堆栈,可能需要弹出。 void方法永远不会放   堆栈上的东西。因此编译器无法处理void   和方法返回时的非void方法相同   价值被忽略;如果方法无效,则没有返回值   所以一定没有流行音乐。

     

由于所有这些原因,“void”不是可以实例化的类型;   它没有价值,这就是它的重点。它不能兑换成   对象和void返回方法永远不会被处理   多态地使用非void返回方法,因为这样做   腐蚀堆栈!

     

因此,void不能用作类型参数,这是一种耻辱,就像你一样   注意。这将非常方便。

     

事后看来,对所有人来说都会更好   如果不是一无所有,那就是一个无效的方法   自动返回“Unit”,一个神奇的单例引用类型。您   然后会知道每个方法调用都会把东西放在堆栈上,   你会知道每个方法调用都会返回一些可能的东西   分配给对象类型的变量,当然也可以是Unit   用作类型参数,因此不需要单独使用   Action和Func委托类型。可悲的是,那不是我们所处的世界。

     

有关这方面的更多想法,请参阅

     

http://blogs.msdn.com/b/ericlippert/archive/2009/06/29/the-void-is-invariant.aspx

     

     

http://blogs.msdn.com/b/ericlippert/archive/2011/02/21/never-say-never-part-one.aspx

     

     

http://blogs.msdn.com/b/ericlippert/archive/2011/11/28/why-have-a-stack.aspx

答案 2 :(得分:1)

这两个词没有区别。它们的含义可以互换。

我发现在处理非托管代码(C / C ++)时,人们会将它们称为函数。但是在处理托管代码(C#/ java)时,人们会将它们称为方法。

答案 3 :(得分:1)

这实际上取决于一个术语。第一个答案没有错,但有些人不会认为它100%正确,单词function的使用可能倾向于从方法中返回。

所以在底层方法中你可以这样做:

void DoSomething()
{
   int i = Sum(1, 2);
}

然后有一个return方法,可以确定为函数:

int Method(int i, int j)
{
   return i + j;
}

所以回答你的问题,两者都不正确。这是你解释它们的方式,因为许多开发人员往往会改变他们所说的内容。但是,VB.Net对方法使用SubFunction,所以如果你来自VB.Net背景,你可以将返回方法称为函数。

答案 4 :(得分:1)

在.NET中,术语几乎是同义词,但在JavaScript等语言中,它们的含义可能略有不同。 (js术语)示例将是方法通常是包含函数的对象属性。

您在这里也可能表示作为函数的差异是独立的功能单元,而方法被定义为类的成员。在。 NET,你通常会听到术语'方法'使用频率超过'功能' (但他们确实有,恰当地命名,'匿名函数')。

此处还有一个关于function and method differences的问题,您可能需要查看其他详细信息。

答案 5 :(得分:0)

这两个词没有区别。

答案 6 :(得分:0)

一直认为这是答案1,我无耻地使用它,偶尔也可以互换地使用它们。

答案 7 :(得分:0)

我在Pascal中遇到过与Answer 1类似的东西,人们称之为void方法 procedures ,返回类型函数的方法

在C#中,通常是,两者都被称为方法。术语功能通常 保留用于 delegates 通常分为 { {3}} functions - 您可以在Answer 1找到类似的术语。

我故意多次使用这个词,因为人们常常从其他语言中引用术语,但我写的是我在印刷的C#文献中经常遇到的事情,比如 actions