Chargement...

Surcharge

Placez dans une classe deux méthodes qui portent toutes les deux le nom paint. Un en-tête est static void paint(string word). L'autre est static void paint(int n). Les corps sont courts : le premier écrit word, le second écrit n. Depuis Main appelez paint("ok"); puis paint(3);. L'écran doit montrer deux lignes : ok sur la première et 3 sur la seconde. C# ne traite pas le second paint comme un conflit. Il traite les deux en-têtes comme des méthodes différentes parce que les listes de paramètres diffèrent. Ce nom partagé avec des listes différentes est ce que cette page enseigne. Gardez la classe publique nommée Pine.

Même nom, listes différentes

Jusqu'ici chaque nouvelle idée utilisait un nom de méthode frais : ring, greet, twice. Ici le nom reste paint exprès. Ce qui change, c'est ce qui se trouve entre les parenthèses. Une liste contient un string. Une autre liste contient un int. Le compilateur garde les deux parce que ces listes ne sont pas les mêmes.
Ouvrez le fichier Pine. Le nom de la classe reste Pine. Cette page ne renomme pas le type. Supprimez toute démo twice qui renvoie n * 2 si cette forme est encore tout ce que vous avez dans Main. Supprimez tout reste de greet. Supprimez toute ligne ReadLine. Le fichier que vous gardez n'attend pas de saisie.
Hors de Main, toujours à l'intérieur des accolades de la classe, écrivez les deux en-têtes paint. Gardez void sur cette page : chaque corps écrit, et rien n'a besoin de revenir à Main via return. Le premier corps utilise Console.WriteLine(word);. Le second utilise Console.WriteLine(n);. Enregistrez le fichier avant d'exécuter. Le premier programme complet est dans la boîte suivante.

Le fichier que vous gardez

C'est la version que vous exécutez en premier. Main contient deux appels. La classe contient deux méthodes paint qui partagent un nom.

paint string and paint int

csharp
using System;

public class Pine
{
    public static void Main()
    {
        paint("ok");
        paint(3);
    }

    static void paint(string word)
    {
        Console.WriteLine(word);
    }

    static void paint(int n)
    {
        Console.WriteLine(n);
    }
}

Lisez-le depuis le haut. using System; prépare les noms courts. public class Pine nomme le type. public static void Main() est l'endroit où l'exécution commence. Le premier appel est paint("ok"). L'argument est un string, donc C# exécute le corps qui prend string word et écrit ok. Le second appel est paint(3). L'argument est un int, donc C# exécute le corps qui prend int n et écrit 3. Le nom paint est le même les deux fois. La liste entre les parenthèses choisit le corps. Deux lignes à l'écran : ok, puis 3.

Exécutez avec dotnet run. Le programme écrit deux lignes et s'arrête. Il n'attend pas que vous tapiez. Si dotnet run attend, ReadLine est encore dans le fichier. Supprimez cette ligne et gardez les deux appels paint plus les deux méthodes paint ci-dessus. L'écran montre ok, puis 3. Si les deux lignes montrent ok, vous avez peut-être laissé seulement la méthode string et écrit un mot fixe pour chaque appel. Si les deux lignes montrent 3, vous avez peut-être laissé seulement la méthode int. Gardez les deux en-têtes. Si la compilation signale que paint est déjà défini, vérifiez si les deux en-têtes ont la même liste — par exemple deux copies de paint(string word). La surcharge exige une vraie différence dans la liste, pas une seconde copie du même en-tête avec seulement un autre nom de paramètre. Vous ne réinstallez pas le SDK .NET pour un écran qui montre les mauvaises lignes.

Une deuxième liste avec deux mots

Le nombre de paramètres peut aussi différer. Ajoutez une troisième surcharge qui prend deux valeurs string et les écrit sur une ligne avec un espace. Laissez les deux premières méthodes paint en place quand vous pratiquez les trois ensemble. Pour une démo concentrée sur cette forme seule, vous pouvez utiliser un fichier qui ne contient que cette liste.

paint two strings

csharp
using System;

public class Pine
{
    public static void Main()
    {
        paint("hi", "sam");
    }

    static void paint(string a, string b)
    {
        Console.WriteLine(a + " " + b);
    }
}

C'est le deuxième fichier. Il enseigne le nombre comme différence de liste. Exécutez dotnet run. L'écran doit montrer une ligne : hi sam. L'appel a deux arguments. La méthode a deux paramètres. Cette correspondance suffit à C# pour choisir ce corps. Si vous avez encore les paint(string word) et paint(int n) précédents dans la même classe, vous pouvez les garder. Un appel avec deux valeurs string ne choisira pas la méthode string à un argument, parce que les nombres diffèrent.
Quand vous mettez les trois surcharges dans un fichier pour vous entraîner, Main peut appeler chaque forme sur sa propre ligne. Un appel avec un string va encore vers paint(string word). Un appel avec un int va encore vers paint(int n). Un appel avec deux valeurs string va vers paint(string a, string b). Le nom partagé n'efface pas ces distinctions. Après avoir vu hi sam, remettez le fichier à deux appels si c'est la forme que vous voulez garder : paint("ok"); puis paint(3);.

Liste vide à côté d'une liste string

Une méthode avec des parenthèses vides est aussi une liste différente. Vous pouvez garder paint() sans paramètres à côté de paint(string word). L'appel vide paint(); exécute le corps à liste vide. L'appel paint("go"); exécute le corps string.

paint empty and paint string

csharp
using System;

public class Pine
{
    public static void Main()
    {
        paint();
        paint("go");
    }

    static void paint()
    {
        Console.WriteLine("ready");
    }

    static void paint(string word)
    {
        Console.WriteLine(word);
    }
}

C'est le troisième fichier. Exécutez dotnet run. L'écran doit montrer ready sur la première ligne et go sur la seconde. Le premier appel n'a rien entre les parenthèses, donc il correspond à paint(). Le second appel envoie un string, donc il correspond à paint(string word). Renommer une méthode en paintReady compilerait aussi, mais c'est une autre compétence. Cette page garde le nom paint et laisse les listes porter la différence.

Quel appel exécute quel en-tête

Lisez les appels à côté des en-têtes. La liste d'arguments dans l'appel doit correspondre à la liste de paramètres dans l'en-tête. Les types et le nombre comptent tous les deux sur cette forme débutante.

📊 call beside matching paint

Call in Main Header that runs Screen line
paint("ok"); paint(string word) ok
paint(3); paint(int n) 3
paint("hi", "sam"); paint(string a, string b) hi sam
paint(); paint() ready

Une confusion courante est d'écrire deux méthodes qui disent toutes les deux paint(string word) et d'attendre que la seconde compte comme une surcharge. Changer seulement le nom du paramètre en paint(string label) ne crée pas une nouvelle liste pour le compilateur. Le type et le nombre sont ce qui compte ici. Une autre confusion est d'appeler paint(true) alors que vous n'avez jamais écrit de liste de paramètres bool. Alors la compilation ne trouve pas de paint correspondant. Ajoutez un en-tête qui prend le type voulu, ou changez l'appel vers un type que vous prenez déjà en charge.
Écrire Console.WriteLine("paint"); dans Main écrit le mot paint. Cela n'appelle aucune méthode. Gardez paint("ok"); quand vous voulez la surcharge qui prend un string. Laisser une méthode twice restante dans le même fichier peut brouiller l'écran si Main écrit encore twice(7). Videz Main jusqu'aux appels paint que vous testez, et gardez seulement les surcharges paint nécessaires pour cette exécution.
Ne placez pas une méthode paint à l'intérieur des accolades de Main. Les méthodes se trouvent dans la classe, à côté de Main. Deux surcharges sont deux méthodes sœurs dans ce même corps de classe.

Vous pouvez garder un nom de méthode et plusieurs listes de paramètres dans la même classe. C# choisit le corps d'après la liste d'arguments de l'appel. L'écran montre la ligne du corps correspondant. Deux en-têtes avec la même liste ne sont pas des surcharges. La page suivante est scope, où vous voyez quels noms sont visibles à l'intérieur d'une méthode et lesquels restent dehors.

L'écran montre le corps correspondant

Le fichier que vous gardez écrit ok, puis 3, quand Main appelle paint("ok"); et paint(3);. Le nom partagé paint est dans chaque appel, et les lettres paint ne sont pas à l'écran comme étiquette imprimée sauf si vous les avez mises entre guillemets. Imbriquer une méthode paint dans Main n'est pas la forme que cette leçon construit.

🧠 Testez Vos Connaissances

Prêt à Commencer

Testez Vos Connaissances

Mettez-vous au défi avec ce quiz interactif et voyez à quel point vous comprenez le sujet

❓
5
Questions
🎯
70%
Pour Réussir
♾️
∞
Temps
🔄
∞
Tentatives

📝 Instructions

  • Lisez chaque question attentivement
  • Sélectionnez la meilleure réponse pour chaque question
  • Vous pouvez refaire le quiz autant de fois que vous le souhaitez
  • Votre progression sera affichée en haut