有人能简单解释OOP环境中的方法与函数吗?


当前回答

使用C#术语,函数和方法之间有区别。术语“函数成员”不仅包括方法,还包括其他非数据成员,如索引器、运算符、构造函数、析构函数和财产,所有成员都包含可执行代码。

reference=>专业C#和.NET 2021版-由Christina Nagel编写

其他回答

类上的方法作用于类的实例,称为对象。

class Example
{
   public int data = 0; // Each instance of Example holds its internal data. This is a "field", or "member variable".

   public void UpdateData() // .. and manipulates it (This is a method by the way)
   {
      data = data + 1;
   }

   public void PrintData() // This is also a method
   {
      Console.WriteLine(data);
   }
}

class Program
{
   public static void Main()
   {
       Example exampleObject1 = new Example();
       Example exampleObject2 = new Example();

       exampleObject1.UpdateData();
       exampleObject1.UpdateData();

       exampleObject2.UpdateData();

       exampleObject1.PrintData(); // Prints "2"
       exampleObject2.PrintData(); // Prints "1"
   }
}

TL;博士

函数是一段要运行的代码。方法是对象内的函数。

函数示例:


function sum(){
  console.log("sum")l
}

方法示例:

const obj = {
a:1,
b:2,
sum(){
  }
}

所以这就是为什么我们说函数中的“this”关键字不是很有用,除非我们将其与call、apply或bind一起使用。。因为call、apply、bind将作为对象内部的方法调用该函数==>基本上它将函数转换为方法

为了我:如果我同意:

函数可以返回值可能需要参数

就像任何一段代码一样,你可能有你放入的对象,你可能会有一个作为结果出现的对象。在这样做的过程中,他们可能会改变对象的状态,但这不会改变他们对我的基本功能。

调用对象或其他代码的函数时可能存在定义差异。但这不就是语言差异的原因吗?这就是为什么人们会互换它们?上面提到的计算示例我会小心处理。因为我雇佣员工来计算:

new Employer().calculateSum( 8, 8 );

通过这样做,我可以依靠雇主负责计算。如果他想要更多的钱,我会让他自由,让碳水化合物收集者处理闲置员工的职能来完成剩下的工作,并雇佣一名新员工。

即使争论一个方法是一个对象函数,而一个函数是不相连的计算,这也无助于我。函数描述符本身以及理想的函数文档将告诉我它需要什么以及它可能返回什么。其余的,比如操纵某个对象的状态,对我来说并不是真正透明的。我确实希望函数和方法都能传递和操纵它们所声称的内容,而不需要详细了解它们是如何做到的。即使是纯计算函数也可能更改控制台的状态或附加到日志文件。

我知道还有很多人已经回答了,但我发现以下是一个简单而有效的单行答案。虽然它看起来并没有比这里的其他答案好很多,但如果你仔细阅读它,它提供了你需要了解的关于方法与函数的一切。

方法是具有定义的接收器的函数,在OOP术语中,方法是对象实例上的函数。

函数是一个数学概念。例如:

f(x,y) = sin(x) + cos(y)

表示函数f()将返回第一个参数的sin加上第二个参数的余弦。这只是数学。碰巧sin()和cos()也是函数。函数有另一个属性:对具有相同参数的函数的所有调用都应返回相同的结果。

另一方面,方法是与面向对象语言中的对象相关的函数。它有一个隐式参数:被作用的对象(及其状态)。

因此,如果对象Z具有方法g(x),则可能会看到以下内容:

Z.g(x) = sin(x) + cos(Z.y)

在这种情况下,传入参数x,与前面的函数示例相同。然而,cos()的参数是位于对象Z内部的值。Z和位于对象Z内的数据(Z.y)是Z的g()方法的隐式参数。