Supposons que ces trois méthodes soient définies :
int F1(int, int);
int F1(float, float);
Float F1(int, int);
et j'appelle ici la méthode F1 :
Console.writeline(F1(5,6).ToString()));
Quelle méthode sera appelée et pourquoi ?
Supposons que ces trois méthodes soient définies :
int F1(int, int);
int F1(float, float);
Float F1(int, int);
et j'appelle ici la méthode F1 :
Console.writeline(F1(5,6).ToString()));
Quelle méthode sera appelée et pourquoi ?
La première et la troisième fonction ne seront pas compilées dans le même espace de noms.
En effet, les signatures de fonctions se différencient par le type et le nombre de paramètres, qui sont identiques. Les types de retour ne sont pas considérés comme faisant partie de la signature de la méthode.
Si vous n'aviez que le premier et le deuxième (ou le deuxième et le troisième) dans l'espace de noms, c'est le plus approprié qui serait appelé (celui avec les types d'entiers passés, puisque vous passez des entiers).
Eric Lippert propose des articles de blog sur les subtilités de C#.
class Program
{
static void Main(string[] args)
{
Add(3, 4,3);
}
public static void Add(int FN, int SN)
{
Console.WriteLine("Total is {0}", FN + SN);
}
public static void Add(int FN, int SN, int TN)
{
Console.WriteLine("Total is {0}", FN + SN + TN);
}
}
Les termes surcharge de méthode et surcharge de fonction sont utilisés de manière interchangeable. La surcharge des méthodes permet à une classe d'avoir plusieurs méthodes portant le même nom. Mais avec une signature différente. Les fonctions C# peuvent être surchargées en fonction du nombre, du type (int, float, etc.) et de la nature (Value, ref ou out) des paramètres. La signature de la méthode n'inclut pas le type de retour et le modificateur de paramètres. Il n'est donc pas possible de surcharger une fonction en fonction du type de retour et du modificateur de paramètres.
L'avez-vous essayé ?
On pourrait penser qu'il devrait exécuter l'un ou l'autre :
int F1(int, int);
ou
Float F1(int, int);
Cependant, la surcharge de fonction ne fonctionne pas sur les valeurs de retour - ce sont les types de paramètres qui doivent être uniques, de sorte que cela ne se compilerait même pas.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.