mardi novembre 2008
C# 4.0, les paramètres nommés et optionnels, y a quoi derrière ?
Par Nico, mardi novembre 2008 à 17:57 :: General
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 