Microsoft poursuit le développement de C# 9.0. Cette mise à niveau du langage orienté objet, à typage sécurisé comprendra des fonctionnalités supplémentaires dont les enregistrements et l'égalité basée sur la valeur. Le langage C# 9.0 devrait faire partie de la plate-forme de développement .NET 5, dont la livraison est prévue en novembre. Il succèdera au C# 8.0 livré en septembre dernier.

Voici en détail les dernières fonctionnalités de la future version présentées la semaine dernière sur le site de la conférence Build 2020 par Mads Torgersen, principal concepteur du C# :

 - Les enregistrements : ils permettent de déclarer qu'un objet entier est immuable et de le faire se comporter comme une valeur. Les enregistrements doivent être considérés davantage comme des données que comme des objets.

- Les expressions with : elles utilisent la syntaxe de l'initialisateur d'objet pour montrer ce qui est différent dans un nouvel objet par rapport à un ancien.

- Amélioration du filtrage par motif.

- Égalité basée sur la valeur : tous les objets héritent d'une méthode virtuelle Equals(object) de la classe d'objets. Celle-ci sert de base à la méthode statique Object.Equals(object, object) quand les deux paramètres sont des non-null. Les structs (similaires aux classes) passent outre la méthode pour avoir une « égalité basée sur la valeur », permettant des comparaisons de chaque champ des structs en appelant des Equals sur eux de manière récursive. Les enregistrements font la même chose. Ainsi, conformément à la « valeur », deux objets d'enregistrement peuvent être égaux sans être le même objet.

- Les motifs relationnels : ils correspondent à des opérateurs relationnels <, <=, et autres.

- Les motifs logiques : ils combinent des motifs avec des opérateurs logiques « and, or, and not », orthographiés sous forme de mots pour éviter toute confusion avec les opérateurs utilisés dans les expressions.

- Des motifs de type simple.

- Propriétés init-only : elle introduit un évaluateur init qui est une variante de l'évaluateur set, pour effectuer un appel pendant l'initialisation de l'objet. Ces propriétés répondent à une limitation des initialisateurs d'objets, qui imposent aux propriétés d’être mutables pour que ces initialisateurs fonctionnent.

- Amélioration du typage de la cible : ce terme décrit à quel moment une expression obtient son type à partir du contexte dans lequel elle est utilisée. Par exemple, les expressions null et lambda sont toujours ciblées. Dans la version C# 9.0, certaines expressions qui n'étaient pas ciblées auparavant pourront désormais être guidées par leur contexte.

- Nouvelles expressions ciblées dans lesquelles le type peut être ignoré s'il existe un type clair auquel l'expression est assignée.

- Retours covariants : indique qu'un contournement de méthode dans une classe dérivée a un type de retour plus spécifique que la déclaration dans le type de base.

- Enregistrements positionnels : ils fournissent une approche aux enregistrements dont le contenu est donné par des arguments de constructeur et peut être extrait avec une déconstruction positionnelle.

- Programmes de haut niveau : permettent de résoudre le problème de l'excès de code passe-partout.