1. dynamiqueExpandoObject
Les amis qui connaissent js savent que js peut s'écrire comme ceci :
afficher sourceprint?1 var t = new Object();
2 t.Abc = 'quelque chose';
3t.Valeur = 243 ;
Désormais, nous pouvons également utiliser cette fonctionnalité du langage dynamique js en c#, à condition qu'une variable soit déclarée comme type ExpandoObject. Par exemple:
voir sourceprint?1 static void Main(string[] arguments)
2 {
3 dynamique t = new ExpandoObject();
4 t.Abc = "abc" ;
5t.Valeur = 10000 ;
6 Console.WriteLine("t's abc = {0}, t's value = {1}", t.Abc, t.Value);
7 Console.ReadLine();
8}
Un nouvel espace de noms System.Dynamic a été ajouté dans C# 4.0 pour prendre en charge cette application. Je ne suis pas sûr de la signification de cette utilisation. Il s'agit également d'un essai de transition de C# vers un langage dynamique.
2. Conversion automatique générique
Avant C# 4.0, le code suivant ne pouvait pas être compilé.
afficher sourceprint?1 IEnumerable<object> objs = new List<string> {
2 "J'ai 0", "J'ai 1", "J'ai 2"
3} ;
Toutefois, dans C# 4.0, ce type de déclaration est autorisé, mais il est limité aux interfaces génériques. Les méthodes similaires pour les types génériques ne sont pas autorisées. Le code suivant comporte une erreur de compilation.
afficher sourceprint?1 List<objet> objList = new List<string> {
2 "Je suis 0", "Je suis 1", "Je suis 2"
3} ;
3. Les paramètres facultatifs des paramètres de méthode sont les suivants : la syntaxe de la déclaration de méthode
view sourceprint?1 static void DoSomething(int notOptionalArg,string arg1 = "par défaut Arg1", string arg2 = "par défaut arg2") {
2 Console.WriteLine("arg1 = {0},arg2 = {1}",arg1,arg2);
3}
Cette méthode comporte trois paramètres. Le premier est un paramètre obligatoire, le deuxième et le troisième sont des paramètres facultatifs et ils ont tous une valeur par défaut. Ce formulaire est utile pour plusieurs surcharges de méthodes avec des paramètres fixes.
Appelé comme suit :
voir sourceprint?1 static void Main(string[] arguments)
2 {
3 Faire quelque chose (1);
4 Faire quelque chose(1, "Gourde");
5 DoSomething(1, "Gourde", "Concombre");
6 Console.ReadLine();
7}
Peut-être penserez-vous, si j'ai une méthode avec la même signature de méthode qu'une méthode de paramètre facultatif sans sélectionner de paramètre, comment C# la gérera-t-il ? Jetons un coup d'œil au code suivant ?
voir sourceprint?1 static void DoSomething (int notOpArg, string arg)
2 {
3 Console.WriteLine("arg1 = {0}", arg);
4}
J'ai surchargé une autre méthode DoSomething. Cette méthode a deux paramètres, mais aucun paramètre facultatif n'a prouvé cet appel.
Lorsque DoSomething(1,"arg"), les méthodes sans paramètres facultatifs seront exécutées en premier.
4. Paramètres nommés des paramètres de méthode Les paramètres nommés nous permettent d'attribuer des valeurs de paramètres en spécifiant les noms des paramètres lors de l'appel de la méthode. Dans ce cas, l'ordre des paramètres peut être ignoré. La déclaration de méthode suivante :
view sourceprint?1 static void DoSomething (int height, int width, string openerName, string scroll) {
2 Console.WriteLine("hauteur = {0},largeur = {1},openerName = {2}, scroll = {3}",hauteur,largeur,openerName,scroll);
3}
On peut appeler la méthode déclarée ci-dessus comme ceci
voir sourceprint?1 static void Main(string[] arguments)
2 {
3 DoSomething( scroll : "no", hauteur : 10, largeur : 5, openerName : "windowame");
4 Console.ReadLine();
5}
Il s’agit évidemment d’un sucre syntaxique, mais cela a du sens lorsqu’il existe de nombreux paramètres de méthode et peut augmenter la lisibilité du code.
http://www.cnblogs.com/yukaizhao/archive/2010/05/24/csharp-40-dynamic-optional-argument.html