Ajouter un commentaire

C# 9 sera enrichi de propriétés init-only et de with-expressions

Par:
admin

lun, 25/05/2020 - 16:58

A l'occasion de Build 2020, Microsoft a communiqué sur C# 9, la prochaine version de son langage maison. Une mouture qui prend forme selon les termes de Redmond.

Un intéressant billet très détaillé de Microsoft explique que C# 9 sera enrichi de propriétés init-only, c'est-à dire de propriétés dont la valeur ne pourra être affectée que lors de l'instanciation d'une classe

new Person
{
    FirstName = "Scott",
    LastName = "Hunter"
}

Microsoft souligne que les initialiseurs d'objets dispensent le développeur d'écrire beaucoup de code passe-partout pour la construction de son type. Tout ce qu'il a à faire est d'écrire quelques propriétés :

public class Person
{
   public string FirstName { get; set; }
   public string LastName { get; set; }
}

Avec cette seule grande limitation que les propriétés doivent être modifiables pour que les initialiseurs d'objet fonctionnent.

Les propriétés init-only viennent remédier à cela en introduisant un accesseur init qui est une variante de l'accesseur set. Ce nouvel accesseur ne peuvant être appelé que lors de l'initialisation de l'objet :

public class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

Étant donné que les accesseurs init-only ne peuvent être appelés que lors de l'initialisation, ils sont autorisés à muter les propriétés en lecture seule (readonly) de la classe englobante, tout comme on peut le faire dans un constructeur :

public class Person
{
    private readonly string firstName;
    private readonly string lastName;

    public string FirstName
    {
        get => firstName;
        init => firstName = (value ?? throw new ArgumentNullException(nameof(FirstName)));
    }

    public string LastName
    {
        get => lastName;
        init => lastName = (value ?? throw new ArgumentNullException(nameof(LastName)));
    }
}

Les with-expression, quant à elles, entrent en jeu lorsqu'on travaille avec des données immuables, mais qu'il est nécessaire de créer de nouvelles valeurs à partir de celles existantes pour représenter un nouvel état. Par exemple, si notre personne devait changer son nom de famille, elle pourrait être représentée par un nouvel objet qui est une copie de l'ancien, sauf le nom de famille qui sera différent. 

Pour aider ce style de programmation, les enregistrements disposeront d'un nouveau type d'expression : with-expression. Soit un enregistrement ainsi déclaré :

public data class Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
}

La with-expression permettra d'écrire : 

var otherPerson = person with { LastName = "Hanselman" };

Retrouvez tous les détails relatifs à ces nouveautés dans le blllet de Microsoft.

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 N   N  M   M  FFFF  EEEE  DDD  
NN N MM MM F E D D
N N N M M M FFF EEE D D
N NN M M F E D D
N N M M F EEEE DDD