Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

C# 4.0, les paramètres nommés et optionnels, y a quoi derrière ?

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 :)

Publié mardi 25 novembre 2008 09:45 par Nicolas
Classé sous :
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

# re: C# 4.0, les paramètres nommés et optionnels, y a quoi derrière ?

Le runtime n'ayant pas, ou peu, changé depuis la version 2 il est normal que le code compilé soit identique à la version 2. Donc il est normal que le compilateur devienne un meilleur traducteur (langage homme machine) :)

mardi 25 novembre 2008 11:12 by VANNESTE Xavier

# re: C# 4.0, les paramètres nommés et optionnels, y a quoi derrière ?

>> http://blogs.developpeur.org/cyril/archive/2008/10/02/vb-net-et-arguments-optionnels-et-c-dans-tout-a.aspx

A l'époque je ne savais pas que C#4 allait implémenter les arguments optionnels, dommages qu'ils ont choisis "la mauvaise" approche.

L'autre solution aurait été d'utiliser des objets ayant différents propriétés

void Foo(int a, int b = 3, int c = 4){}

serait compilé en

class FooObjArguments {

   prop int a {}

   prop int b {}

   prop int c {}

}

void Foo(FooObjArguments args){}

Bref, il y avait des solution CLS compliant qui ne pose pas le problème que j'évoque dans mon post (qui est pour moi un gros problème).

mardi 25 novembre 2008 12:28 by cyril

# re: C# 4.0, les paramètres nommés et optionnels, y a quoi derrière ?

A l'epoque j'avais zappé ton post cyril desolé, je pense que la surcharge avec les contrainte qu'on a dans les autres language, c'est a dire que les parametre optionnel doivent etre a la fin et qu'on n'est tributaire de l'ordre (pas possibilité de renseigne une valeur pour le 3eme si le 2eme et le 1er n'ont pas ete renseigné) aurait eté une meilleur approche, surtout qu'elle a fait ses preuve. Les propriétés je sais pas trop car si on a Foo(int a, int b=3, int c=4) et une autre Foo2(int a, int b=4, int c=1) on aura un beau bordel au moment de la compilation avec des propriété du style Foo_a et Foo2_a sans parler du fait que le developpeur aurait pu deja faire une propriété Foo_a par exemple. Bref voila un truc mal implementé a voir donc avec le recul.

mardi 25 novembre 2008 13:03 by VANNESTE Xavier
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le il y a 17 heures et 39 minutes

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le il y a 20 heures et 12 minutes

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59

- Perspective 3.0 pour Silverlight 5.0 par Perspective le 02-07-2012, 22:39