0

我在谷歌上搜索方法和函数之间的区别,我得到了两个答案。

答案-1

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

void Method()
{
}

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

int Method()
{
}

答案 - 2

这两个术语之间没有区别。

查询 - 哪个是正确的或有任何第三件事?

4

8 回答 8

5

没有区别。

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

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


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

于 2012-11-29T16:54:20.557 回答
2

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

区别与 void 的处理方式有关:这很好地解释了它https://softwareengineering.stackexchange.com/questions/131036/why-is-void-not-allowed-as-a-generic-type-in ​​- C

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

“void”的根本问题在于它与任何其他返回类型的含义不同。“void”表示“如果此方法返回,则它根本不返回任何值”。不为空;null 是一个值。它不返回任何值。

这真的弄乱了类型系统。类型系统本质上是一个对特定值有效的操作进行逻辑推论的系统。一个 void 返回方法不返回一个值,所以问题是“什么操作对这个东西有效?” 根本没有任何意义。没有“事物”可以进行有效或无效的操作。

而且,这会破坏运行时的某些东西。.NET runtine 是虚拟执行系统的实现,它被指定为堆栈机器。也就是说,一个虚拟机,其中所有操作都根据它们对评估堆栈的影响来表征。(当然,在实践中,机器将在具有堆栈和寄存器的机器上实现,但虚拟执行系统只假设一个堆栈。)调用 void 方法的效果与调用 void 方法的效果根本不同非空方法;非 void 方法总是将一些东西放在堆栈上,这可能需要弹出。一个 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

于 2012-11-29T16:56:14.567 回答
1

这两个术语之间没有区别。它们的含义是可以互换的。

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

于 2012-11-29T16:56:09.153 回答
1

这实际上取决于术语。第一个答案没有错,但有些人也不会认为它是 100% 正确的,这个词的使用function往往是方法返回的地方。

因此,在底层方法中,您可以执行以下操作:

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

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

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

因此,要回答您的问题,两者都不正确。这是您对它们的解释方式,因为许多开发人员确实倾向于改变他们所说的内容。然而,VB.Net 确实使用Suband Functionfor 方法,因此如果您有VB.Net背景,您可以将返回方法称为函数。

于 2012-11-29T17:02:15.577 回答
1

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

您也可以在这里声明的差异作为函数是指独立的功能单元,而方法被定义为类的成员。在。NET 中,您通常会听到比“函数”更频繁地使用“方法”一词(但它们确实有,恰当地命名为“匿名函数”)。

这里还有一个关于功能和方法差异的问题,您可能想查看更多详细信息。

于 2012-11-29T17:27:20.857 回答
0

这两个术语之间没有区别。

于 2012-11-29T16:54:32.007 回答
0

一直以为是Answer 1,我无耻地用它,偶尔也可以互换使用。

于 2012-11-29T16:55:15.297 回答
0

Answer 1在 Pascal 中遇到过类似的情况,人们将 void 方法称为procedure和具有返回类型functions的方法。

在 C# 中,通常两者都称为方法。术语函数通常是为代表保留的,通常分为函数动作——在那里你可以Answer 1再次找到与你相似的术语。

我故意多次使用“通常”这个词,因为人们经常从其他语言中引入术语,但我写的是我在C# 4.0 Unleashed等印刷 C# 文献中最常遇到的东西。

于 2012-11-29T17:06:53.943 回答