Voici un aperçu rapide de ce que Microsoft a apporté dans C# 14 : de nouvelles extensions, un certain nombre de fonctionnalités qui vous rendent plus productif et des améliorations qui optimisent les performances de vos programmes C#. Les nouvelles fonctionnalités de C# 14 devraient permettre aux développeurs C# de bénéficier de certaines des améliorations de performances offertes par .NET 10.C# est un langage de programmation orientée objet, commercialisé par Microsoft depuis 2002 et destiné à développer sur la plateforme Microsoft .NET, au même titre que d’autres langages liés à cette plateforme (ex. : VB .NET, J#, etc.). C# est dérivé du C++ et très proche du Java dont il reprend la syntaxe générale ainsi que les concepts, y ajoutant des notions telles que la surcharge des opérateurs, les indexeurs et les délégués. Il est utilisé notamment pour développer des applications web sur la plateforme ASP.NET, ainsi que des jeux vidéo avec les moteurs de jeux Unity et Godot.
En mai, Microsoft a présenté les nouvelles fonctionnalités du langage de programmation de C# 14. C# 14 inclut les nouvelles fonctionnalités suivantes : Membres d’extension, Mot clé field, Conversions de portée implicites, Types génériques non liés et nameof, Paramètres lambda simples avec modificateurs, Plus de membres partiels, Affectation conditionnelle nulle. Ces fonctionnalités sont disponible à l’aide de la dernière version de Visual Studio 2022.
Récemment, Microsoft a annoncé la dernière version de son framework logiciel .NET 10, apportant des améliorations au compilateur JIT, des améliorations NativeAOT, ainsi que l'optimisation du runtime. Il s'agit d'une version à support à long terme (LTS) qui devrait recevoir des mises à jour jusqu'en novembre 2028. Selon Microsoft, .NET 10 est la version la plus productive, moderne, sécurisée, intelligente et performante de .NET à ce jour.
C# 14 est fourni avec .NET 10. Les nouveaux membres extension constituent la principale nouveauté, mais de nombreuses autres fonctionnalités vous permettront d'améliorer votre productivité en tant que développeur. Microsoft a également ajouté de nouvelles fonctionnalités à C# 14 qui devraient permettre de bénéficier de certaines des améliorations de performances offertes par .NET 10.
Membres Extension
Les membres extension sont la fonctionnalité phare de C# 14. La nouvelle syntaxe est entièrement compatible avec les méthodes extension existantes. Les membres extension permettent d'utiliser des propriétés extension, des opérateurs extension et des membres extension statiques.
Le code suivant montre un exemple de bloc d'extension. Le bloc d'extension contient deux extensions d'instance suivies de deux extensions statiques pour le même type. Le nom du récepteur, source, est facultatif si l'extension ne contient que des extensions statiques.
| Code C# : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public static class EnumerableExtensions { // Instance-style extension members: 'source' is the receiver variable extension<TSource>(IEnumerable<TSource> source) { // Extension property public bool IsEmpty => !source.Any(); // Extension method (body elided for brevity) public IEnumerable<TSource> Where(Func<TSource, bool> predicate) { // Implementation would filter 'source' throw new NotImplementedException(); } // Static extension property public static IEnumerable<TSource> Identity => Enumerable.Empty<TSource>(); // Static user-defined operator provided as an extension public static IEnumerable<TSource> operator +( IEnumerable<TSource> left, IEnumerable<TSource> right) => left.Concat(right); } } |
Exemples d'utilisation :
| Code C# : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | int[] data = ...; // access instance extension property: if (data.IsEmpty) { /* ... */ } // Access static extension operator + var combined = data + [ 4, 5 ]; // Access static extension property: var empty = IEnumerable<int>.Identity; |
Les blocs d'extension étant compatibles au niveau de la source et du binaire avec les méthodes extension existantes, vous pouvez migrer une méthode à la fois. Les assemblages dépendants n'ont pas besoin d'être recompilés et continuent à se lier au symbole d'origine.
Plus de productivité pour vous
Cet ensemble de fonctionnalités linguistiques partage un objectif commun : réduire les frictions syntaxiques pour les tâches quotidiennes afin que vous puissiez vous concentrer sur la logique du domaine plutôt que sur la cérémonie. Elles éliminent les passages standard, suppriment les blocs conditionnels courants, simplifient les déclarations lambda, améliorent les types partiels pour les générateurs de source et rendent [c]nameof[/cc] plus expressif dans les scénarios génériques. Individuellement, chacune d'entre elles permet d'économiser quelques lignes et de réduire la saisie. Ensemble, elles se traduisent par un code plus propre, moins d'identificateurs triviaux et un code qui communique plus clairement l'intention.
- Le mot-clé field
- Types génériques non liés et nameof
- Paramètres lambda simples avec modificateurs
- Affectation conditionnelle null
- Événements et constructeurs partiels
Le mot-clé field
La plupart des propriétés commencent leur vie comme de simples propriétés auto-implémentées. Plus tard, vous découvrez que vous avez besoin de petits éléments de logique (fusion de valeurs null, clamping, normalisation simple ou activation d'une garde) sur un seul accesseur. Avant C# 14, cette exigence vous obligeait à convertir en un modèle de champ de support entièrement écrit à la main :
| Code C# : | Sélectionner tout |
1 2 3 4 5 6 7 8 | // Before private string _message = ""; public string Message { get => _message; init => _message = value ?? throw new ArgumentNullException(nameof(value)); } |
Le mot-clé contextuel field crée une étape intermédiaire dans cette évolution : conserver la concision de la propriété automatique, injecter un minimum de logique uniquement là où cela est nécessaire et laisser le compilateur synthétiser et nommer le stockage de support. Vous ajoutez simplement le corps de l'accesseur qui nécessite de la logique et vous faites référence au stockage généré par le compilateur via field :...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.