C# 4.0 ajoute enfin les notions de paramètre optionnel et nommé. Si nous reprenons le code suivant :
static void Main(string[] args)
{
//Appel de la methode en utilisant le parametre optionel
MaMethode1();
//Appel de la methode en utilisant le parametre nommé
MaMethode1(maVar: "Valeur par parametre nommé");
// Appel de la methode de facon classique
MaMethode1("Valeur standard");
Console.ReadLine();
}
static void MaMethode1(string maVar = "Valeur par defaut")
{
Console.WriteLine(maVar);
}
Ouvrons le maintenant avec Reflector :
Notre methode1 devient :
private static void MaMethode1([Optional, DefaultParameterValue("Valeur par defaut")] string maVar)
{
Console.WriteLine(maVar);
}
On constate que le compilateur à ajouté 2 attribut issues du namespace System.Runtime.InteropServices. Ces 2 attributs ne vous sont pas inconnus ? Ils existaient déjà dans la version précédente.
Regardons à présent, comment le compilateur fait l’appel à notre méthode :
private static void Main(string[] args)
{
MaMethode1("Valeur par defaut");
string CS$0$0000 = "Valeur par parametre nomm\x00e9";
MaMethode1(CS$0$0000);
MaMethode1("Valeur standard");
Console.ReadLine();
}
Et bien, nous constatons que pour l’utilisation du paramètre par défaut, le compilateur remonte la valeur par défaut, dans l' appel à la méthode en tant que paramètre.
Concernant le paramètre nommé, le compilateur créer une variable intermédiaire. Comme quoi, c’est bien le compilateur qui fait tout le boulot :)