Le method overloading ou l’overload de méthode est un concept assez simple et très utile en programmation. Nous sommes chanceux puisque C# et Visual Basic peuvent tout les deux faire du method overloading!
Qu’est-ce que c’est?
En gros, il s’agit de deux méthodes utilisant le même nom mais avec des signatures différentes. Ce qui veut dire que les deux méthodes ont sensiblement la même fonction dans le programme, toutefois leurs paramètres et valeurs de retour ne sont pas les mêmes.
Un exemple s’il vous plait!?
J’ai créé une classe simple nommée Calculator dans un nouveau projet de type Console.
C#
using System.Collections.Generic; namespace MethodOverloading { public class Calculator { public Queue LastResults { get; set; } public Calculator() { LastResults = new Queue(); } public int AddNumbers(int NumberOne, int NumberTwo) { int Result = NumberOne + NumberTwo; return Result; } public double AddNumbers(double NumberOne, double NumberTwo) { double Result = NumberOne + NumberTwo; return Result; } } }
Visual Basic
Public Class Calculator Public Property LastResults As Queue(Of Double) Public Sub New() LastResults = New Queue(Of Double) End Sub Public Function AddNumbers(ByVal NumberOne As Integer, ByVal NumberTwo As Integer) As Integer Dim Result As Integer Result = NumberOne + NumberTwo Return Result End Function Public Function AddNumbers(ByVal NumberOne As Double, ByVal NumberTwo As Double) As Double Dim Result As Double Result = NumberOne + NumberTwo Return Result End Function End Class
Dans cette classe vous pouvez voir que j’ai ajouté une méthode avec le même nom deux fois. C’est effectivement une méthode qui est overloaded! Le nom est le même, toutefois la signature ne l’est pas. Dans la première je retourne un double et prend (double,double) en paramètres tandis que dans la deuxième je retourne un Int et prend (Int,Int) en paramètres. J’ai ajouté LastResults simplement comme historique de calcul potentiel pour que ça ait éventuellement l’air d’une calculatrice.
Comment utiliser une methode de ce type?
Ma classe Program.cs/MethodOverloading.vb est construite comme suit.
C#
Visual Basic
J’aimerais que vous portiez attention à mon appel de la méthode AddNumbers. Vous pouvez voir que la complétion nous indique +1 overload. C’est que Visual Studio a bien compris que nous avons deux possibilités d’overload pour cette méthode, exactement ce que nous souhaitons.
C#
using System; namespace MethodOverloading { class Program { static void Main(string[] args) { Calculator MyCalculator = new Calculator(); double DoubleResult = MyCalculator.AddNumbers(15.32, 64.21); int IntResult = MyCalculator.AddNumbers(67, 98); Console.WriteLine("The Double Result: {0}", DoubleResult); Console.WriteLine("The Int Result: {0}", IntResult); Console.ReadKey(); } } }
Visual Basic
Module MethodOverloading Sub Main() Dim MyCalculator As New Calculator() Dim DoubleResult As Double DoubleResult = MyCalculator.AddNumbers(15.32, 64.21) Dim IntResult As Integer IntResult = MyCalculator.AddNumbers(67, 98) Console.WriteLine("The Double Result: {0}", DoubleResult) Console.WriteLine("The Int Result: {0}", IntResult) Console.ReadKey() End Sub End Module
Dans le code ci-dessus, j’utilise les deux méthodes l’une à la suite de l’autre puis montre les résultats dans la console.
Ça fonctionne!
Comme vous pouvez le voir dans la sortie de la console, l’une des deux valeurs contient des décimales (Double) tandis que l’autre est entière (Int). Ceci confirme que le résultat des deux méthodes est différent puisque nous avons utilisé un overload différent pour chaque appel. Vous remarquerez que le .Net Framework tire souvent avantage de cette fonctionnalité et vous devriez en faire autant dans votre code!
Lorsque vous souhaitez créer deux méthodes ayant des buts communs, mais ne partagent pas les mêmes paramètres ou la même valeur de retour, il s’agit peut-être de candidat pour un overload!
YouTube
C#
Visual Basic
No Comments Yet!
You can be first to comment this post!