Menu
Coddy logo textTech

Surcharge de méthodes

Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy — leçon 50 sur 70.

La surcharge de méthode vous permet de définir plusieurs méthodes avec le même nom mais des listes de paramètres différentes. Le compilateur détermine quelle version appeler en fonction des arguments que vous fournissez.

Chaque méthode surchargée doit avoir une signature unique - soit un nombre différent de paramètres, soit des types de paramètres différents :

public static void Print(string message)
{
    Console.WriteLine(message);
}

public static void Print(string message, int times)
{
    for (int i = 0; i < times; i++)
        Console.WriteLine(message);
}

public static void Print(int number)
{
    Console.WriteLine(number);
}
// Le compilateur choisit la bonne version
Print("Hello");           // Appelle Print(string)
Print("Hi", 3);           // Appelle Print(string, int)
Print(42);                // Appelle Print(int)

La surcharge diffère des paramètres optionnels d'une manière importante. Avec les paramètres optionnels, vous avez une seule méthode qui gère plusieurs scénarios. Avec la surcharge, vous avez des méthodes distinctes qui peuvent contenir une logique complètement différente pour chaque cas.

Notez que le type de retour seul ne rend pas les méthodes uniques - vous ne pouvez pas avoir deux méthodes qui ne diffèrent que par ce qu'elles retournent. La liste des paramètres doit être différente. La surcharge de méthodes est une forme de polymorphisme à la compilation, où la décision concernant la méthode à appeler est prise lors de la compilation du code, et non lors de son exécution.

challenge icon

Défi

Facile

Construisons une classe de calculatrice polyvalente qui démontre la puissance de la surcharge de méthodes. Vous allez créer plusieurs versions de méthodes de calcul qui gèrent différents scénarios - des simples opérations à deux nombres aux calculs plus complexes - tout en partageant les mêmes noms de méthodes intuitifs.

Vous organiserez votre code sur deux fichiers :

  • Calculator.cs : Créez une classe Calculator dans l'espace de noms MathTools avec des méthodes surchargées qui partagent des noms mais acceptent des paramètres différents :
    • Multiply - Créez trois versions surchargées :
      • Une qui prend deux paramètres int et retourne leur produit sous forme d'int
      • Une qui prend trois paramètres int et retourne leur produit sous forme d'int
      • Une qui prend deux paramètres double et retourne leur produit sous forme de double
    • Describe - Créez deux versions surchargées :
      • Une qui prend un int et retourne "Integer: {value}"
      • Une qui prend un double et retourne "Double: {value}"
  • Program.cs : Dans votre fichier principal, créez une instance de Calculator et démontrez comment le compilateur sélectionne automatiquement la bonne méthode surchargée en fonction des arguments que vous fournissez.

Vous recevrez quatre entrées :

  • Premier entier (par ex., 5)
  • Deuxième entier (par ex., 4)
  • Troisième entier (par ex., 3)
  • Un nombre décimal (par ex., 2.5)

En utilisant votre calculatrice, effectuez ces opérations et affichez chaque résultat sur sa propre ligne :

  1. Multipliez les deux premiers entiers (utilise la version à deux int)
  2. Multipliez les trois entiers (utilise la version à trois int)
  3. Multipliez le premier entier et le nombre décimal (utilise la version à deux double)
  4. Décrivez le premier entier (utilise la version int)
  5. Décrivez le nombre décimal (utilise la version double)

Par exemple, si les entrées sont 5, 4, 3, et 2.5, la sortie devrait être :

20
60
12.5
Integer: 5
Double: 2.5

Remarquez comment vous appelez Multiply et Describe avec différents types et nombres d'arguments, et pourtant le compilateur sait exactement quelle version utiliser à chaque fois. C'est le polymorphisme au moment de la compilation en action - la décision se prend lorsque votre code est compilé, pas lorsqu'il s'exécute !

Aide-mémoire

La surcharge de méthode vous permet de définir plusieurs méthodes portant le même nom mais ayant des listes de paramètres différentes. Le compilateur détermine quelle version appeler en fonction des arguments fournis.

Chaque méthode surchargée doit avoir une signature unique - soit un nombre différent de paramètres, soit des types de paramètres différents :

public static void Print(string message)
{
    Console.WriteLine(message);
}

public static void Print(string message, int times)
{
    for (int i = 0; i < times; i++)
        Console.WriteLine(message);
}

public static void Print(int number)
{
    Console.WriteLine(number);
}

// Le compilateur choisit la bonne version
Print("Hello");           // Appelle Print(string)
Print("Hi", 3);           // Appelle Print(string, int)
Print(42);                // Appelle Print(int)

Points clés sur la surcharge de méthode :

  • La surcharge diffère des paramètres optionnels - avec la surcharge, vous avez des méthodes distinctes qui peuvent contenir une logique complètement différente pour chaque cas
  • Le type de retour seul ne rend pas les méthodes uniques - la liste des paramètres doit être différente
  • La surcharge de méthode est une forme de polymorphisme au moment de la compilation, où la décision concernant la méthode à appeler est prise lors de la compilation du code, et non lors de son exécution

Essayez vous-même

using System;
using MathTools;

class Program
{
    public static void Main(string[] args)
    {
        // Lire les entrées
        int firstInt = Convert.ToInt32(Console.ReadLine());
        int secondInt = Convert.ToInt32(Console.ReadLine());
        int thirdInt = Convert.ToInt32(Console.ReadLine());
        double decimalNum = Convert.ToDouble(Console.ReadLine());

        // TODO: Créer une instance de Calculator

        // TODO: Appeler Multiply avec deux entiers et afficher le résultat

        // TODO: Appeler Multiply avec trois entiers et afficher le résultat

        // TODO: Appeler Multiply avec le premier entier et le nombre décimal, afficher le résultat

        // TODO: Appeler Describe avec le premier entier et afficher le résultat

        // TODO: Appeler Describe avec le nombre décimal et afficher le résultat
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet