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 !

C# 8.x va introduire la fonctionnalité Records pour faciliter la création des classes POCO
Selon Developers Anonymous

Le , par Bill Fassinou

278PARTAGES

12  0 
Developers Anonymous a annoncé dans un billet de blogue ce week-end que la fonctionnalité Records destinée à faciliter la création de classes POCO sera introduite à partir de l’une des versions de la branche C# 8.x, mais pas dans C# 8.0. Selon Developers Anonymous, Microsoft inclura cette fonctionnalité un peu plus tard, car pour le moment, l’effort est consenti sur d’autres fonctionnalités jugées plus importantes et plus utiles pour la sortie du C# 8.0. « Soyons clairs. Cela avait été initialement prévu pour la version 8 de C#, mais en raison d’autres fonctionnalités plus importantes et de la complexité de cette fonctionnalité, il a été reporté pour une version ponctuelle, peut-être la version 8.1 ou la 8.2, etc. », a expliqué le site à propos de la fonctionnalité.

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);
}
Le compilateur propose une implémentation de la méthode Deconstruct() lors de la génération du code de la classe. Cette méthode, indique Developers Anonymous, va permettre à l’utilisateur de simplement déconstruire une instance de cette classe avec une syntaxe très similaire à ValueTuple.

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

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

Avatar de Pol63
Expert éminent sénior https://www.developpez.com
Le 07/03/2019 à 15:07
moi je vois plus ça pour un DTO

un poco chez moi ce sont des dependency properties (wpf oblige), et chez d'autres il y a INotifyPropertyChanged, et chez encore d'autres ce sont les DTO qui ont
INotifyPropertyChanged … (sans parler de ceux qui utilisent EF et qui ont surement moins ces problématiques)
0  0