C# 15 : les nouveautés à venir

Par:
francoistonic

mer, 26/08/2026 - 17:32

En novembre prochain, .Net 11 sera disponible. Il incluera C# 15. La plateforme est actuellement en preview 7. C# 15 inclut plusieurs nouveautés dans le langage :

1 / les types union

Ce type permet de définir les types qu'une valeur peut prendre. "Une union restreint la valeur à l'un des types spécifiés. Les types d'une union ne sont pas nécessairement liés par héritage. Utilisez la fonctionnalité de hiérarchies fermées pour limiter l'ensemble des types liés par héritage."

Explication : "Un animal de compagnie contient un chat, un chien ou un oiseau. Chaque type est implicitement converti en animal de compagnie. Le compilateur connaissant l'ensemble complet, une instruction switch portant sur un animal de compagnie non nul est exhaustive sans nécessiter de branchement par défaut ni de branche de rejet." explique l'équipe.
Pet pet = new Dog("Rex");
string name = pet switch
{
    Dog d => d.Name,
    Cat c => c.Name,
    Bird b => b.Name,
};

2 / hiéarchies fermées (closed hierarchies)

"Les hiérarchies fermées appliquent le même principe aux hiérarchies de classes que vous concevez. Le modificateur `closed` sur une classe la rend implicitement abstraite et restreint ses types dérivés directs à l'assembly déclarant. Vous déclarez les sous-types autorisés au lieu de laisser la dérivation ouverte."

3 / memory safety (preview)

La sécurité par design est l'un des enjeux des langages. C# 15 introduit une refonte de unsafe. Attention : ce modèle peut changer avec .Net 12 & C# 16. "Dans le nouveau modèle, les types pointeur ne nécessitent plus de contexte non sécurisé. Vous pouvez déclarer un type pointeur, accéder à une adresse avec `&`, utiliser l'instruction `fixed`, convertir un `stackalloc` en pointeur et utiliser `sizeof` sur un type non managé dans un contexte sécurisé." dixit la présentation.

4 / Collection expression arguments

"Les expressions de collection peuvent être converties en de nombreux types de collections, mais jusqu'à présent, il était impossible de passer des arguments au constructeur ou à la méthode `Create` sous-jacente. C# 15 introduit l'élément `with(...)`, placé en début de code, qui transmet les arguments au constructeur ou à la méthode de fabrique.".