Cette version majeure du langage C# est en préparation depuis un certain temps. Le plan de l'entreprise est que C# 8.0 soit livré en même temps que .NET Core 3.0. Le premier aperçu de cette version du langage a été publié par la firme en novembre dernier. Dans cette préversion, quelques fonctionnalités faisaient leur apparition notamment les types de références nullables, les flux asynchrones et les types Range et Index. D’autres fonctionnalités telles que les modèles récursifs (des modèles qui contiennent d’autres modèles) et les expressions Switch sont également prévues pour C# 8.0.
La Preview 2 publiée il y a quelques semaines par Microsoft apporte encore plus de fonctionnalités que la première avec de nombreuses améliorations. On peut citer entre autres : une amélioration de la correspondance des modèles, les expressions Switch comme annoncées dans le premier aperçu, les modèles de tuple, les fonctions locales statiques et les structures, etc. Microsoft ne l’a encore souligné nulle part ailleurs, mais Developers Anonymous annonce que la fonctionnalité Records sera dans l’une des versions de la branche 8.x. Cette fonctionnalité va permettre de définir, à l’avenir, une classe POCO de manière plus simple et plus explicite.
Si vous n’êtes pas habitué au terme POCO, il s’agit de l'abréviation de Plain Old CLR Object. Un objet POCO (Plain Old CLR Object) est une classe, qui ne dépend d'aucune classe de base spécifique à l'infrastructure. C'est comme n'importe quelle autre classe .NET normale. Ces entités POCO (également appelées objets ignorant la persistance) prennent en charge la plupart des mêmes requêtes LINQ que les entités dérivées de l'objet entité. Ces classes (classes POCO) implémentent uniquement la logique métier du domaine de l'application. Le POCO en .NET Framework possède des équivalents dans les autres langages tels que POJO (Plain Old Java Object) en Java, le POPO (Plain Old PHP Object) en PHP, le PONSO (Plain Old NSObject) en Objective-C, etc.
Très souvent, explique le site Developers Anonymous, écrire le code pour ces classes revient à écrire beaucoup de code passe-partout. C’est à ce stade que C# 8.x vient simplifier le processus de création de ces classes en introduisant Records. La syntaxe des enregistrements permet au compilateur de faire tout le travail pour le développeur et de produire ce code sans qu’il ne l'écrive. Contrairement aux extraits de code dans lesquels le développeur utilise simplement une touche de raccourci pour générer un modèle de code à remplir, la nouvelle syntaxe indique simplement au compilateur le type de classe qu’il veut et le compilateur le génère pour lui. Voici un exemple de ce qu’explique ce blog :
public class Person(string Name, string Surname, string Address, DateTime DateOfBirth);.
Le résultat généré par cette ligne de code est étendu à une classe beaucoup plus grande qui implémente également IEquatable avec des méthodes telles que GetHashCode(), Equals(), Deconstruct(), etc.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | using System; public class Person: IEquatable<Person> { public string Name { get; } public string Surname { get; } public string Address { get; } public DateTime DateOfBirth { get; } public Person(string Name, string Surname, string Address, DateTime DateOfBirth) { this.Name = Name; this.Surname = Surname; this.Address = Address; this.DateOfBirth = DateOfBirth; } public bool Equals(Person other) { return Equals(Name, other.Name) && Equals(Surname, other.Surname) && Equals(Address, other.Address) && Equals(DateOfBirth, other.DateOfBirth); } public override bool Equals(object other) { return (other as Person)?.Equals(this) == true; } public override int GetHashCode() { return (Name.GetHashCode() * 17 + Surname.GetHashCode() + Address.GetHashCode() + DateOfBirth.GetHashCode()); } public void Deconstruct(out string Name, out string Surname, out string Address, out DateTime DateOfBirth) { Name = this.Name; Surname = this.Surname; Address = this.Address; DateOfBirth = this.DateOfBirth; } public Person With(string Name = this.Name, string Surname = this.Surname, string Address = this.Address, DateTime DateOfBirth = this.DateOfBirth) => new Person(Name, Surname, Address, DateOfBirth); } |
Toutefois, les internautes ne semblent pas très enthousiastes à la lecture de ce billet. Par exemple, beaucoup d’entre eux sur les réseaux sociaux discutent cette affirmation du site. Selon ces derniers, cette fonctionnalité est remise en cause depuis sa proposition à la version 6 du langage et jusque là, aucune publication de Microsoft n’indique qu’elle fera l’objet d’une étude approfondie pour sa prise en charge par C# 8.1 ou supérieur.
Source : Billet de blog
Et vous ?
Qu'en pensez-vous ?
Cette fonctionnalité sera-t-elle vraiment prise en charge dans C# 8.x ?
Voir aussi
Microsoft revient avec plus de détails sur .NET Core 3.0 et .NET Framework 4.8 bientôt une dissemblance entre le Framework .NET et .NET Core
Microsoft livre un aperçu des nouveautés de C# 8.0 et envisage de commencer à livrer cette version dans les préversions de Visual Studio 2019
Visual Studio Code 1.29 est disponible : aperçu des nouveautés dans l'éditeur de code open source et multiplateforme de Microsoft
Microsoft livre un aperçu des changements de l'expérience et l'interface utilisateur dans Visual Studio 2019, la prochaine version majeure de son EDI
Microsoft annonce que ASP.NET Core 3.0 fonctionnera uniquement sur .NET Core 3.0 et ne sera plus compatible avec la plateforme .NET Framework