有人能简单解释OOP环境中的方法与函数吗?
当前回答
使用C#术语,函数和方法之间有区别。术语“函数成员”不仅包括方法,还包括其他非数据成员,如索引器、运算符、构造函数、析构函数和财产,所有成员都包含可执行代码。
reference=>专业C#和.NET 2021版-由Christina Nagel编写
其他回答
函数是执行特定任务的一组指令或过程。它可以用来将代码分割成易于理解的部分,这些部分也可以被调用或重用。
方法是可以对对象执行的操作。它也称为存储为对象财产的函数。
主要区别:函数不需要任何对象并且是独立的,而方法是一个函数,它与任何对象链接。
//firstName() is the function
function firstName(){
cosole.log('John');
}
firstName() //Invoked without any object
const person = {
firstName: "John",
lastName: "Doe",
id: 5566,
};
//person.name is the method
person.name = function() {
return this.firstName + " " + this.lastName;
};
document.getElementById("demo").innerHTML =
"My father is " + person.name() //performs action on object;
在Object Pascal或C++等OO语言中,“方法”是与对象关联的函数。因此,例如,“狗”对象可能具有“吠叫”功能,这将被视为“方法”。相反,“StrLen”函数是独立的(它提供作为参数提供的字符串的长度)。因此,它只是一个“函数”。Javascript在技术上也是面向对象的,但与C++、C#或Pascal这样的成熟语言相比,它面临许多限制。尽管如此,这种区别仍然存在。
另外还有几个事实:C#是完全面向对象的,因此您无法创建独立的“函数”。在C#中,每个函数都绑定到一个对象,因此从技术上讲,都是一个“方法”。关键是,在C#中很少有人将它们称为“方法”-他们只是使用“函数”一词,因为没有任何真正的区别。
最后,为了让任何Pascal专家都不要跳到我这里,Pascal还区分了“函数”(返回值)和“过程”(不返回值)。C#并没有明确区分这一点,当然,您可以选择是否返回值。
一般来说:方法是属于类的函数,函数可以在代码的任何其他范围内,因此您可以声明所有方法都是函数,但不是所有函数都是方法:
以下面的python为例:
class Door:
def open(self):
print 'hello stranger'
def knock_door():
a_door = Door()
Door.open(a_door)
knock_door()
给出的示例向您展示了一个名为“Door”的类,该类具有名为“open”的方法或操作,它被称为方法,因为它是在类中声明的。下面还有一部分代码带有“def”,它定义了一个函数,这是一个函数因为它没有在类中声明,这个函数调用我们在类中定义的方法,正如您所看到的那样,最后函数被自己调用。
正如您所看到的,您可以在任何地方调用函数,但如果您想调用方法,要么必须传递一个与声明方法的类(class.method(object))类型相同的新对象,要么必须调用对象内部的方法(object.method()),至少在python中是这样。
将方法视为只有一个实体可以做的事情,所以如果你有一个Dog类,那么只在该类中有一个bark函数是有意义的,这就是一个方法,如果你还有一个Person类,那么编写一个不属于任何类的函数“feed”是有意义的,因为人和狗都可以被喂养,你可以调用这个函数,因为它不属于任何特定的类。
简单的记忆方式:
作用→ 免费(免费意味着它可以在任何地方,不需要在对象或类中)方法→ 成员(对象或类的成员)
方法和功能之间有明显的区别:
函数是一段独立的代码,您可以在任何地方调用它,只需在给定的参数中提及它的名称,就像在大多数过程语言(如C++和python)中一样。虽然
方法与对象具体相关,这意味着您只能在调用方法之前使用点(.)符号提及它的对象,就像在C#和java等纯面向对象语言中一样。