logo le blog invivoo blanc

Les nouveautés de C# 11

24 avril 2023 | C#, Non classifié(e) | 0 comments

C# 11 a été publié avec le dernier .Net 7 en novembre 2022.
Bien que la plupart des nouvelles fonctionnalités sont axées sur la performance, il existe de nombreuses améliorations qui changeront notre façon de coder.
Dans cet article, nous apprendrons les fonctionnalités les plus importantes (à mes yeux) avec des exemples.

Required Members

Grâce au mot clé « Required », Il est possible aujourd’hui de rendre obligatoire l’initialisation des propriétés d’une classe ou d’une structure.

Prenons l’exemple de la classe « Point » avec deux membres requis : X et Y

Essayons de créer une instance de cette classe sans l’initialisation d’un de ses membres requis :

Nous avons bien une erreur de compilation liée à l’obligation d’initialisation de la propriété Y.

PS : Si le classe a également un constructeur qui définit les propriétés requises, l’attribut « SetsRequiredMembers » doit être ajouté à la déclaration du constructeur.  Par conséquent, le compilateur force ce constructeur à définir une valeur initiale pour tous les membres requis.

La classe « Point » peut alors avoir la déclaration suivante :

C# 11 : Raw String Literals

Plus besoin d’écrire du code supplémentaire pour gérer les chaînes de caractère ! Enfin une nouvelle syntaxe qui facilite l’intégration de texte arbitraire, y compris les espaces blancs, les sauts de ligne, les guillemets incorporés et autres caractères spéciaux.

Ces chaînes commencent et se terminent par trois guillemets (“””).

Le format de sortie de la chaîne de caractères sera identique au même format dans son code source.

Voici un exemple :

Saut de ligne dans l’interpolation de string

Encore dans le même contexte, Il est désormais possible d’inclure un saut de ligne dans la manipulation des chaînes de caractères. C’est-à-dire au lieu de tout écrire dans une seule ligne, nous pouvons utiliser plusieurs lignes et rendre le code plus lisible. Voyons un exemple :

List Patterns en C# 11

Cette fonctionnalité permet de faire une correspondance entre une séquence d’éléments et une liste ou un tableau.

Procédons avec l’exemple pour mieux voir de quoi il s’agit.
Considérons de deux listes d’entiers ; paire et impaire

Testons d’abord la correspondance de toute la séquence en spécifiant tous les éléments :

La vérification de la correspondance de certains éléments dans une séquence de longueur connue est aussi possible. La syntaxe ( _ ) permet d’ignorer un seul élément dans la séquence fournie.

Maintenant, si nous ne sommes pas concernés par la longueur de la liste, nous pouvons utiliser la syntaxe (..) pour faire correspondre zéro ou plusieurs éléments.

A noter que les exemples précédents utilisent un pattern simple pour déterminer si un élément est un nombre donné.

Mais n’importe lequel de ces patterns pourrait être remplacé par un pattern différent, comme :

Le mot clé file

Un nouveau modificateur de visibilité a été ajouté dans C# 11. Maintenant, nous pouvons créer des types qui ne sont accessibles qu’au sein du même fichier source.
Ceci est principalement utile pour les générateurs de code. Un générateur de code peut générer une classe limitée à son fichier source de sortie en garantissant que le type n’entrera pas en conflit avec un autre type dans le programme de destination.

Voici un exemple qui illustre un conflit de nommage. Considérons ces deux classes qui figurent dans le même namespace :

Nous constatons l’erreur de compilation ci-dessous :

Il suffit alors d’ajouter le modificateur file pour que la classe généré « Canvas » ne présente aucun problème.

Conclusion des nouveautés C# 11 :

Même si qu’il n’avait pas des changements de fond, C# 11, avec toutes les améliorations présentées, va faciliter le quotidien des développeurs (Surtout en ce qui concerne les chaines de caractères).
Pour aller plus loin et voir plus de détails, Je vous conseille de consulter la page Microsoft dédiée.

Envie d’une avant-première concernant C# 12 ? Suivez le repo GitHub correspondant !

Références :

https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-11

https://www.codemag.com/Article/2211032/What%E2%80%99s-New-in-C

https://github.com/dotnet/docs/blob/main/docs/csharp/whats-new/csharp-11.md