Une méthode surcharge-t-elle une autre ou les deux méthodes sont-elles «surchargées»

13

Si je crée cette méthode

public void foo()

Et puis je crée une version surchargée comme celle-ci

public void foo( string bar )

Disons-nous que la seconde fonction surcharge la première, ou les deux méthodes sont-elles également "surchargées"?

Cela impliquerait (je pense), qu'il existe une fonction de type de base, qui est surchargée, par une autre fonction (un peu comme l'héritage, mais pas vraiment).

En supposant qu'une méthode peut "en surcharger une autre", cela impliquerait également des termes comme "surcharge" et "surcharge", si c'est un mot. Mais cela ne semble pas du tout approprié, d'autant plus que vous pouvez avoir plusieurs surcharges.

Je suis arrivé à cette question quand je voulais écrire le processus de création d'une méthode surchargée et je voulais la façon la plus correcte de l'écrire.

Exemples:

  • Je surcharge foo
  • Je SURCHARGE fooavecfoo( string bar )
  • Je crée une méthode surchargée
  • Je fais foo surchargé

Alors oui, ça m'a fait réfléchir, je ne sais pas quoi en penser. Il existe des centaines, voire des milliers, de descriptions de surcharge de fonctions en ligne, mais à première vue, je n'ai trouvé aucune solution à ce problème.

Willem D'Haeseleer
la source
Je voudrais savoir pourquoi le mot surcharge a été utilisé pour cela. Cela ne semble pas avoir de sens. Qu'est-ce qui est chargé? Comment est-il chargé à nouveau ou excessivement?
Martin Maat
@MartinMaat Avez-vous lu la réponse acceptée par thiton et le commentaire de kindall à ce sujet? Ils semblent bien expliquer ce qui est (sur) chargé.
8bittree
J'ai lu ceux-ci, ils expliquent le concept, pas l'éthomologie.
Martin Maat

Réponses:

29

Lorsque l'on parle de surcharges, le nom de la fonction est surchargé, pas la fonction elle-même. Les fonctions surchargeant le nom sont des "surcharges" et surchargent le nom, mais pas les unes les autres. Dans votre exemple, "public void foo()"et les "public void foo( string bar )"deux surchargent le nom "foo". Par conséquent, vous ne pouvez pas parler de surcharge et de surcharge d'une des fonctions, car elles n'ont pas de relation directe.

Dans vos exemples, vous pouvez dire que vous surchargez "foo" (le nom) avec "foo (string bar)" (la fonction), mais vous ne pouvez pas dire que vous créez une méthode surchargée, car les méthodes ne sont jamais surchargées. Vous pouvez dire que vous créez une méthode de surcharge. Formuler "faire foo surchargé" est juste une pire façon de dire "foo surcharge".

thiton
la source
Mais alors, chaque fonction ne surchargerait-elle pas son nom, même si aucune autre fonction n'a le même?
leftaroundabout
Je suis d'accord avec cela comme réponse à la question générale ci-dessus. Mais si l'un a appelé l'une des fonctions de l'autre, alors je perçois un sens dans lequel l'un a surchargé l'autre.
Joshua Drake
3
@leftaroundabout: "Surcharge" implique que vous effectuez plus de "chargement" que d'habitude, donc le terme n'est utilisé que lorsque vous avez plus d'une fonction avec le même nom.
kindall
D'accord avec @kindall; le mot «surcharge» dans un contexte de développement logiciel signifie «attribuer plusieurs sens à»; surcharge des colonnes dans une base de données (la signification dépend d'autres champs), surcharge des paramètres (la signification dépend d'autres paramètres), etc. Une méthode n'en surcharge pas une autre, mais s'il y a plus d'une méthode avec un nom , le nom est " surchargé".
KutuluMike
15

Je dirais simplement que fooc'est surchargé. Il n'y a certainement pas de relation maître / esclave ou parent / enfant qui se passe ici.

DeadMG
la source
2
D'accord - c'est le nom de la méthode ou de l'opérateur qui est surchargé, pas la méthode elle-même. À ne pas confondre avec la substitution , où l'implémentation d'une méthode donnée dans une sous-classe remplace l'implémentation dans la classe parente.
Caleb
1
Je suis également d'accord avec cela, mais je pense que Thiton fait un meilleur travail pour l'expliquer. Merci pour votre réponse !
Willem D'Haeseleer
3

Je pense qu'une bonne façon de l'exprimer est de se concentrer sur le résultat final, pas sur les changements apportés à la classe au fil du temps. Ainsi, au lieu de dire "J'ai surchargé 'foo' avec 'foo (autres paramètres)'", "vous dites" foo est une fonction surchargée, avec 'foo ()' et 'foo (autres paramètres). ""

mjfgates
la source