Pourquoi le compilateur C# n'est-il pas perturbé par les méthodes qui ont des arguments par défaut?Pourquoi le compilateur C# n'est-il pas perturbé par les méthodes qui ont des arguments par défaut?
Dans le code ci-dessous SayHello()
peut se référer à:
- SayHello()
- SayHello (chaîne arg1 = null)
- SayHello (chaîne arg1 = null, string arg2 = null)
- SayHello (chaîne arg1 = null, chaîne arg2 = null, chaîne arg3 = null)
Mais ce code compile avec succès sans toute erreur ambiguë.
class Program
{
private static void SayHello()
{
Console.WriteLine("Hello 1");
return;
}
private static void SayHello(string arg1 = null)
{
Console.WriteLine("Hello 2");
return;
}
private static void SayHello(string arg1 = null, string arg2 = null)
{
Console.WriteLine("Hello 3");
return;
}
private static void SayHello(string arg1 = null, string arg2 = null, string arg3 = null)
{
Console.WriteLine("Hello 3");
return;
}
private static void Main(string[] args)
{
SayHello(); // SayHello() invoked, but SayHello(string arg1 = null) not invoked.
SayHello("arg1");
SayHello("arg1", "arg2", "arg3");
// Output is:
// Hello 1
// Hello 2
// Hello 3
return;
}
}
Je ne comprends pas ce que vous demandez ici. Demandez-vous quelle section de la spécification de langage décrit les règles pour résoudre ces ambiguïtés? Parce que la réponse à la question que vous avez posée est "parce que les personnes qui ont conçu la langue et écrit le compilateur ont soigneusement examiné tous ces cas et ont choisi des règles qui mènent à des résultats raisonnables." Quoi d'autre serait la réponse? –