Dans Visual Basic, la surcharge des méthodes (overloading) permet de créer plusieurs méthodes avec le même nom, mais avec des paramètres différents (types, quantités, ordres). Pour la surcharge, on utilise le mot-clé Overloads avant la déclaration de la méthode. Cela aide à rendre l'interface de la classe plus flexible et pratique, permettant d'utiliser la même méthode avec différents ensembles de paramètres. La réécriture (overriding), en revanche, est liée à l'héritage et permet dans une classe dérivée de modifier l'implémentation d'une méthode de la classe de base ; pour cela, on utilise les mots-clés Overrides (dans la classe dérivée) et Overridable (dans la classe de base).
Exemple de surcharge de méthodes :
Class MathUtil ' Surcharge pour l'addition de deux entiers Public Overloads Function Add(a As Integer, b As Integer) As Integer Return a + b End Function ' Surcharge pour l'addition de trois entiers Public Overloads Function Add(a As Integer, b As Integer, c As Integer) As Integer Return a + b + c End Function ' Surcharge pour l'addition de deux nombres à virgule flottante Public Overloads Function Add(a As Double, b As Double) As Double Return a + b End Function End Class
Question : "Peut-on surcharger des procédures et des fonctions par le nom du type de retour ? Pourquoi ?"
Réponse : Non, dans Visual Basic, la surcharge des méthodes n'est autorisée que par l'ensemble des paramètres (type, quantité, ordre). La surcharge par le type de valeur de retour est impossible : si les signatures des méthodes diffèrent uniquement par le type de résultat, une erreur de compilation se produira.
Exemple :
' Cela provoquera une erreur de compilation ! Overloads Function Foo(x As Integer) As Integer End Function Overloads Function Foo(x As Integer) As String End Function
Histoire
Dans un projet de banque en ligne, un développeur a mis en œuvre des méthodes de validation des utilisateurs par surcharge, mais a choisi une distinction uniquement par le type de valeur de retour (par exemple, l'un retournait Boolean, l'autre String pour le message d'erreur). Cela a conduit à une ambiguïté dans l'appel de la méthode, à l'impossibilité de compilation, et l'équipe a dû corriger rapidement l'interface, ce qui a retardé la livraison.
Histoire
Dans un système d'entreprise pour la gestion des stocks, ils ont essayé de créer une méthode surchargée AddItem, en les distinguant par le type de résultat de retour (par exemple, l'un — le résultat de l'ajout, l'autre — l'ID de l'enregistrement ajouté). Après l'intégration avec une API externe, les tests ont cessé de se compiler, car le langage ne prend pas en charge une telle surcharge, et il a fallu revoir complètement l'architecture d'interaction.
Histoire
Dans un ancien projet pour le traitement de données scientifiques, ils ont essayé de surcharger une fonction par type de retour (un Double, l'autre Decimal). Les exemples d'appels se sont révélés indistinguables pour le compilateur, ce qui a conduit à des erreurs d'exécution inattendues et à un double travail pour corriger l'interface de la bibliothèque.