一种方法会使另一种方法超载,还是两种方法都“超载”


13

如果我创建此方法

public void foo()

然后我创建一个像这样的重载版本

public void foo( string bar )

我们是说第二个函数重载了第一个函数,还是两个方法都同样“重载了”?

这意味着(我认为),存在一个基本类型的函数,该函数正在被另一个函数重载(有点像继承,但不是真的)。

假设一种方法可以“超载另一种”,那么即使这只是一个词,也将暗示诸如“ overloader”和“ overloadie”之类的术语。但这根本感觉不对,尤其是因为您可能会有多个重载。

当我想记下创建重载方法的过程并且想要最正确的记下来方法时,我遇到了这个问题。

例子:

  • 我超载 foo
  • 我重载foofoo( string bar )
  • 我正在创建一个重载方法
  • 我正在使foo超载

是的,这让我思考,我不确定该怎么做。在线上有成百上千的函数重载的描述,即使不是成千上万的描述,但是乍一看,我找不到任何解决方法。


我想知道为什么为此使用了重载这个词。这似乎没有任何意义。正在加载什么?如何重新加载或过度加载?
马丁·马特

@MartinMaat您是否已阅读thiton 接受的答案以及kindall对此的评论?他们似乎很好地解释了(超载)什么。
8bittree

我读过这些,他们解释的是概念,而不是词源。
马丁·马特

Answers:


29

在谈论重载时,函数的名称是重载的,而不是函数本身。重载名称的函数是“重载”,重载名称,但彼此不能重载。在您的示例中,"public void foo()"并且"public void foo( string bar )"两者都重载了名称“ foo”。因此,您不能说其中一个功能的重载者和重载者,因为它们没有直接关系。

在示例中,您可以说您正在用“ foo(string bar)”(函数)重载“ foo”(名称),但是您不能说您创建了一个重载方法,因为方法永远不会被重载。您可以说您创建了一个重载方法。制定“使foo重载”只是说“ overload foo”的一种较差的方式。


但是,即使没有其他函数具有相同的名称,那么不是每个函数都会重载其名称吗?
leftaboutabout

我同意将其作为上述一般问题的答案。但是,如果一个函数从另一个函数中调用了一个函数,那么我会感觉到其中一个函数会重载另一个函数。
Joshua Drake 2012年

3
@leftaroundabout:“重载”表示您比平时进行的“重载”更多,因此仅当您具有多个同名函数时才使用该术语。
kindall 2012年

同意@kindall; 在软件开发环境中,“过载”一词的意思是“赋予多个含义”;重载数据库中的列(含义取决于其他字段),重载参数(含义取决于其他参数)等。一种方法不会重载其他方法,但是如果有一个以上方法具有一个名称,则名称为“超载”。
KutuluMike 2012年

15

我只是说foo是超载。当然,这里没有主/从或父/子关系。


2
同意- 重载的是方法或运算符的名称,而不是方法本身。不要与覆盖混淆,在子类中给定方法的实现将取代父类中的实现。
Caleb'4

1
我也同意这一点,但是我认为thiton在解释它方面做得更好。谢谢您的回答 !
Willem D'Haeseleer

3

我认为表达这一点的一种好方法是关注最终结果,而不是随时间对班级进行的更改。因此,您不是说“我用'foo(other parameters)'重载了'foo',而是说” foo是一个带有'foo()'和'foo(other parameters)的重载函数。”)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.