Découvrez les nouveautés de C#11

C# 11 arrive en novembre, en même temps que .NET 7, et comme dans chaque nouvelle version, ce langage de programmation apporte son lot de nouvelles fonctionnalités.
Dans cet article, je vous propose de nous intéresser à une partie des nouveautés de C# 11 (vous pouvez retrouver la liste complète ici : What’s new in C# 11 – C# Guide | Microsoft Learn)
Attributs génériques
Il est maintenant possible de déclarer une classe d’attribut générique.
Avant C# 11 :
Avec C# 11 :
A noter : les arguments de type suivant ne sont pas autorisés :
- dynamic
- string?
- (string x, string y)
Ils doivent être remplacés par :
- « Object » plutôt que « dynamic »
- « string » plutôt que « string? » (le type « Nullable » n’est pas autorisé)
- « ValueTuple<string, string> » plutôt que « (string x, string y) »
Membres requis
Il est possible d’ajouter le modificateur « required » sur les propriétés d’une classe, afin de rendre leur initialisation obligatoire.
Chaînes littérales brutes (Raw string literals)
Ce nouveau format de chaîne de caractères permet de contenir des espaces, des retours à la ligne et certains caractères spéciaux. Ces chaînes de caractères commencent et finissent par des triples double quote (“””). Il est également possible de combiner ce format avec l’interpolation de chaîne pour inclure des « { » dans le texte. Le nombre de « $ » indique le nombre d’accolades consécutives qui commencent et terminent l’interpolation.
Retour à la ligne dans l’interpolation de chaîne
Cette fonctionnalité permet d’inclure dans une chaîne de caractères un retour à la ligne dans l’interpolation.
Avant C# 11 (tout le code est sur une même ligne) :
Avec C# 11 :
Chaines littérales UTF-8
Il est dorénavant possible de simplifier la création de chaîne UTF-8.
Avant C# 11 :
byte[] array = Encoding.UTF8.GetBytes("Hello World");
Avec C# 11 :
byte[] array = "Hello World"u8.ToArray();
Scope « nameof » étendu
Les noms des paramètres d’une méthode sont maintenant disponibles dans le scope de « nameof » lors de la déclaration d’un attribut :
[MyAttribute(nameof(param))] public void Method(int param, [MyAttribute(nameof(param))] int anotherParam) { }
List patterns
Il étend le pattern matching pour intégrer la correspondance avec des séquences d’éléments d’une liste ou d’un tableau.
Nouveau mot clé : « file »
Ce nouveau mot clé permet de créer un type dont la visibilité est limitée au fichier dans lequel il est déclaré. Dans l’exemple ci-dessous, la classe « User » ne pourra pas être instanciée en dehors de ce fichier CS :
Avis d’expert sur les nouveautés C# 11
Voici donc un aperçu de la plupart des nouvelles fonctionnalités de C# 11, certaines étant plus utiles que d’autres. Pour ma part, je sais déjà que les fonctionnalités 1 (attributs génériques), 2 (membres requis) et 4 (retour à la ligne dans l’interpolation de chaîne) me seront utiles lors de mon passage à C# 11.
Vous souhaitez en savoir plus sur les nouveautés de .NET 7 ? Retrouvez nos autres articles sur ce sujet :