Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Les nouveautés de C# 6
Un tutoriel de Thomas Levesque

Le , par tomlev

0PARTAGES

15  0 
Bonjour,

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.

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de tomlev
Rédacteur/Modérateur https://www.developpez.com
Le 13/04/2015 à 16:09
Bonjour,

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
5  0 
Avatar de worm83
Membre éprouvé https://www.developpez.com
Le 10/04/2014 à 13:22
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 : Sélectionner tout
1
2
3
4
5
6
7
8
9
  
  class Point(private readonly int x, private readonly int y) 
    { 

        public int X { get { return x; } } 

        public int Y { get { return y; } } 

    }
3  0 
Avatar de pascalCH
Membre averti https://www.developpez.com
Le 07/05/2014 à 16:45
Citation Envoyé par Jabbal'H Voir le message
Idem ca pique un peu.

Une autre chose, mais c'est peut être moi, c'est quoi l’intérêt de çà ?
Code : Sélectionner tout
1
2
public int Answer { get; } = 42;
Oui, dommage de ne pas avoir retenue la très élégante forme du Delphi ce qui aurait donné un truc du genre :

Code : Sélectionner tout
public int Answer { get; set; default=42};
3  0 
Avatar de tomlev
Rédacteur/Modérateur https://www.developpez.com
Le 17/04/2015 à 19:35
@Tidus, autre exemple typique pour nameof :

Code : Sélectionner tout
1
2
3
4
5
6
7
public void SayHello(string name)
{
    if (name == null)
        throw new ArgumentNullException(nameof(name));

    Console.WriteLine($"Hello {name}");
}
L'avantage par rapport à new ArgumentNullException("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.
2  0 
Avatar de Jabbal'H
Membre confirmé https://www.developpez.com
Le 10/04/2014 à 14:10
Citation Envoyé par worm83 Voir le message
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 : Sélectionner tout
1
2
3
4
5
6
7
8
9
  
  class Point(private readonly int x, private readonly int y) 
    { 

        public int X { get { return x; } } 

        public int Y { get { return y; } } 

    }
Idem ca pique un peu.

Une autre chose, mais c'est peut être moi, c'est quoi l’intérêt de çà ?
Code : Sélectionner tout
1
2
public int Answer { get; } = 42;
C'est presque une constante, ou bien cela provient du fait de pouvoir faire çà
Code : Sélectionner tout
1
2
3
4
5
6
public class Point(int x, int y) 
{ 
    public int X { get; } = x; 
    public int Y { get; } = y; 
}
Pour le reste, de belles évolutions ! Vivement dans 5 ans qu'on puisse l'utiliser en entreprise :d
1  0 
Avatar de tomlev
Rédacteur/Modérateur https://www.developpez.com
Le 10/04/2014 à 14:27
Citation Envoyé par worm83 Voir le message
Le seul truc qui me fait "tické" est cela car je le trouve "brouillon". Le reste est très intéressante.

Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
  
  class Point(private readonly int x, private readonly int y) 
    { 

        public int X { get { return x; } } 

        public int Y { get { return y; } } 

    }
Dans ce cas précis ça n'a effectivement pas beaucoup d'intérêt, il serait plus simple de faire ça :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
  
  class Point(int x, int y) 
    { 

        public int X { get; } =x;

        public int Y { get; } = y;

    }
Mais il peut y avoir des cas où c'est utile : par exemple si tu ne veux pas exposer le champ via une propriété, ça t'évite de faire un constructeur où tu dois explicitement initialiser le champ.

Citation Envoyé par Jabbal'H Voir le message
Une autre chose, mais c'est peut être moi, c'est quoi l’intérêt de çà ?
Code : Sélectionner tout
1
2
public int Answer { get; } = 42;
C'est presque une constante
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é.

Citation Envoyé par Jabbal'H Voir le message

ou bien cela provient du fait de pouvoir faire çà
Code : Sélectionner tout
1
2
3
4
5
6
public class Point(int x, int y) 
{ 
    public int X { get; } = x; 
    public int Y { get; } = y; 
}
Oui, c'est la possibilité d'initialiser une propriété auto et de pouvoir faire une propriété auto en lecture seule.

Citation Envoyé par Jabbal'H Voir le message
Pour le reste, de belles évolutions ! Vivement dans 5 ans qu'on puisse l'utiliser en entreprise :d
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)
1  0 
Avatar de Reward
Membre confirmé https://www.developpez.com
Le 17/04/2015 à 11:13
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.
1  0 
Avatar de Reward
Membre confirmé https://www.developpez.com
Le 17/04/2015 à 11:14
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.
1  0 
Avatar de worm83
Membre éprouvé https://www.developpez.com
Le 10/04/2014 à 14:16
Citation Envoyé par Jabbal'H Voir le message


Une autre chose, mais c'est peut être moi, c'est quoi l’intérêt de çà ?
Code : Sélectionner tout
1
2
public int Answer { get; } = 42;
Je trouve cela pratique ça t'évite de faire cela :

Code : Sélectionner tout
1
2
3
4
5

int _Answer = 42;

public int Answer{get{return _Answer;}
Ou d'écrire le constructeur sans argument pour initialiser 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 ).
0  0 
Avatar de Jabbal'H
Membre confirmé https://www.developpez.com
Le 10/04/2014 à 14:29
Ah oui effectivement, j'avais la tête ailleurs :d
0  0