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.
Défi
FacileConstruisons 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 classeCalculatordans l'espace de nomsMathToolsavec 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
intet retourne leur produit sous forme d'int - Une qui prend trois paramètres
intet retourne leur produit sous forme d'int - Une qui prend deux paramètres
doubleet retourne leur produit sous forme dedouble
- Une qui prend deux paramètres
Describe- Créez deux versions surchargées :- Une qui prend un
intet retourne"Integer: {value}" - Une qui prend un
doubleet retourne"Double: {value}"
- Une qui prend un
Program.cs: Dans votre fichier principal, créez une instance deCalculatoret 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 :
- Multipliez les deux premiers entiers (utilise la version à deux int)
- Multipliez les trois entiers (utilise la version à trois int)
- Multipliez le premier entier et le nombre décimal (utilise la version à deux double)
- Décrivez le premier entier (utilise la version int)
- 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.5Remarquez 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
}
}
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
1Fondamentaux de la POO
Fichiers externesEspaces de noms et directivesIntro aux classes et objetsLe mot-clé 'this'Méthodes et paramètresChamps vs PropriétésConstructeursInitialiseurs d'objetsRécapitulatif - Calculatrice simple4Héritage
Syntaxe de base de l'héritage (:)Le mot-clé 'base'Mots-clés Virtual & OverrideClasses scelléesLa classe de base 'object'Récapitulatif - Hiérarchie des employés7Fonctionnalités avancées
Surcharge d'opérateursIndexeurs (this[])Redéfinition de ToString()Méthodes d'extensionRécapitulatif - Liste personnalisée10Patrons de conception - Partie 1
Introduction aux patrons de conceptionSingleton Thread-SafePatron FabriquePatron Observateur (Événements)Patron Stratégie2Propriétés et membres statiques
Propriétés auto-implémentéesPropriétés en lecture/écriture seuleChamps et méthodes statiquesClasses statiquesMembres à corps d'expression5Polymorphisme & Interfaces
Polymorphisme : Compilation vs ExécutionInterface vs Classe AbstraiteInterfaces MultiplesInterfaces ExplicitesUpcasting & DowncastingRécapitulatif - Calculateur de Formes8Concepts avancés de la POO
Composition plutôt qu'héritageGénériques (Classes et Méthodes)Délégués et ÉvénementsAttributs et RéflexionIDisposable et l'instruction usingBases de l'Injection de Dépendances11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Architecture des classes
Données d'instance vs statiquesMots-clés 'readonly' & 'const'Champs de supportRécapitulatif - Gestionnaire de compte bancaire6Encapsulation
Modificateurs d'accèsPropriétés pour l'encapsulationImplémentation du masquage de donnéesPatterns d'immuabilitéRécapitulatif - Dossiers d'étudiants12Projet : Système de gestion de bibliothèque
Structure du projetModèles Livre et Utilisateur