Les nouveautés de C# 6
Mise à jour du tutoriel de Thomas Levesque
Le 2014-04-09 20:40:51, par tomlev, Rédacteur/Modérateur
Bonjour,
Cette discussion est destinée à recevoir vos commentaires concernant l'article Les nouveautés de C# 6.
Cette discussion est destinée à recevoir vos commentaires concernant l'article Les nouveautés de C# 6.
Lors de la conférence BUILD 2014, Microsoft a fait plusieurs annonces importantes ; la plus marquante, de mon point de vue de développeur, est que le projet Roslyn est maintenant open source ! Pour rappel, il s'agit du nouveau compilateur pour C# et VB.NET. Du coup, bien que le projet ne soit pas encore terminé, la liste des nouveautés des langages est déjà disponible, et on peut même commencer à jouer avec certaines d'entre elles. Cet article se propose de faire un petit tour d'horizon des nouveautés prévues pour C# 6.
-
tomlevRédacteur/ModérateurBonjour,
Un an après la première publication, je viens de mettre à jour l'article sur les nouveautés de C# 6 pour tenir compte de l'évolution de la situation.
En effet, depuis la conférence BUILD en 2014, les choses ont bien changé : le design du langage est maintenant figé et ne devrait plus évoluer. Certaines fonctionnalités qui étaient initialement prévues ont finalement été abandonnées, d'autres ont un peu changé par rapport à ce qui était envisagé. Sauf surprise de dernière minute, l'article devrait maintenant correspondre au langage C# 6 tel qu'il sera lors sa sortie finale.
Bonne (re)lecture !Lire l'article: les nouveautés de C# 6 le 13/04/2015 à 16:09 -
worm83Membre éprouvéBonjour,
Merci pour cet article.
J'aime bien dans l'ensemble les facilités apportées par cette nouvelle version.
Le seul truc qui me fait "tické" est cela car je le trouve "brouillon". Le reste est très intéressante.Code : 1
2
3
4
5
6
7
8
9class Point(private readonly int x, private readonly int y) { public int X { get { return x; } } public int Y { get { return y; } } }
le 10/04/2014 à 13:22 -
pascalCHMembre avertiOui, dommage de ne pas avoir retenue la très élégante forme du Delphi ce qui aurait donné un truc du genre :
Code : public int Answer { get; set; default=42};
le 07/05/2014 à 16:45 -
tomlevRédacteur/Modérateur@Tidus, autre exemple typique pour nameof :
Code : 1
2
3
4
5
6
7public void SayHello(string name) { if (name == null) throw new ArgumentNullException(nameof(name)); Console.WriteLine($"Hello {name}"); }
est multiple :
- l'Intellisense te propose le nom du paramètre
- le compilateur vérifie que le nom que tu as mis correspond bien à quelque chose qui existe
- les outils de refactoring sont capables de modifier l'instruction si tu renommes le paramètre.le 17/04/2015 à 19:35 -
Jabbal'HMembre confirméIdem ca pique un peu.
Une autre chose, mais c'est peut être moi, c'est quoi l’intérêt de çà ?
Code : 1
2public int Answer { get; } = 42;
Code : 1
2
3
4
5
6public class Point(int x, int y) { public int X { get; } = x; public int Y { get; } = y; }
le 10/04/2014 à 14:10 -
tomlevRédacteur/ModérateurDans ce cas précis ça n'a effectivement pas beaucoup d'intérêt, il serait plus simple de faire ça :
Code : 1
2
3
4
5
6
7
8
9class Point(int x, int y) { public int X { get; } =x; public int Y { get; } = y; }
C'est plutôt comme un champ public readonly en fait ; au niveau de la compilation, ce sera traité comme une propriété et non comme une constante. Surtout, ça permet de modifier l'implémentation plus tard si nécessaire sans changer l'interface publique de la classe : rien ne t'empêche à l'avenir de modifier la propriété pour renvoyer autre chose, et le code qui en dépend ne sera pas impacté.
Oui, c'est la possibilité d'initialiser une propriété auto et de pouvoir faire une propriété auto en lecture seule.
Pas forcément ; comme je le disais dans la conclusion, même si tu cibles une version plus ancienne de .NET, la plupart de ces fonctionnalités sont quand même utilisables. J'ai testé en compilant pour .NET 2, tout marche sans problème (à part bien sûr ce qui est lié à async/await)le 10/04/2014 à 14:27 -
RewardMembre confirméBonjour Tidus.
Non ce n'est pas pour faire de la réflexion.
La réfléxion est évaluée lors de l'exécution.
NameOf est évalué lors de la compilation.
A quoi cela sert il ?
Imagine que tu veuilles utiliser le nom d'une classe dans un log.
Une solution simple consiste à écrire le nom dans le log, comme ceci : Console.WriteLine("MaClasse".
Cependant, si tu changes le nom de ta classe, la refactorisation n'affectera pas la chaine de caractère que tu utilises dans le Console.WriteLine.
C'est là que le NameOf s'avère utile. Tu peux désormais écrire : Console.WriteLine(NameOf(MaClasse). Avec cette méthode, si tu changes le nom de ta classe en MaClasseBis, le refactoring modifiera automatiquement le contenu du NameOf.le 17/04/2015 à 11:13 -
RewardMembre confirméJe complète en disant que cela va générer le même code que dans la 1ere solution, mais ça sera plus propre.le 17/04/2015 à 11:14
-
worm83Membre éprouvéJe trouve cela pratique ça t'évite de faire cela :
Code : 1
2
3
4
5int _Answer = 42; public int Answer{get{return _Answer;}
Après sur une classe conséquente ça doit être un peu bordélique (remarque : pas plus que d'avoir pleins de membre privés initialisés à la déclaration ).le 10/04/2014 à 14:16 -
Jabbal'HMembre confirméAh oui effectivement, j'avais la tête ailleurs :dle 10/04/2014 à 14:29