.NET 5.0 inclut de nombreuses améliorations, notamment des applications à fichier unique, des images de conteneur plus petites, des API JsonSerializer plus performantes, un ensemble complet d'annotations de type référence Nullable et la prise en charge de Windows ARM64. Les performances ont été considérablement améliorées, dans les bibliothèques NET, dans le GC et le JIT. ARM64 était un objectif clé pour l'investissement dans les performances, ce qui se traduisait par un meilleur débit et des binaires plus petits. .NET 5.0 inclut de nouvelles versions de langage, notamment C# 9 et F# 5.0.
.NET 5.0 inclut également la prise en charge de Web Assembly, à l'aide du runtime Mono et des bibliothèques .NET. C'est la base de Blazor Web Assembly dans .NET 5.0. Il s'agit d'un changement par rapport à Blazor 3.2, qui utilisait le runtime Mono et les bibliothèques Mono. L'année dernière, Microsoft a présenté une vision d'une plateforme .NET unifiée, avec un ensemble de bibliothèques et d'outils pour tous les types d'applications .NET. Les avantages de ce changement sont une expérience de développement unique pour .NET, une compatibilité beaucoup plus élevée entre les différents types d'applications .NET et la maintenance et l'amélioration d'une seule base de code.
Maintenant que la version est feature complete, passons en revue quelques nouveautés de .NET 5.0.
Langages
C# 9 et F# 5 font partie de la version .NET 5.0 et sont inclus dans le SDK .NET 5.0. Visual Basic est également inclus dans le SDK 5.0. Il n'inclut pas les modifications de langage, mais a des améliorations pour prendre en charge le Visual Basic Application Framework sur .NET Core.
Les générateurs de sources C# sont une nouvelle fonctionnalité importante du compilateur C# qui ne fait pas techniquement partie de C# 9 car il n'a pas de syntaxe de langage.
C# 9
C# 9 est une version importante du langage, axée sur la simplicité du programme, l'immuabilité des données et plus de modèles. Voici quelques éléments que les développeurs pourraient trouver intéressants.
Programmes de haut niveau
Les programmes de haut niveau offrent une syntaxe plus simple pour les programmes, avec beaucoup moins de cérémonie. Cette syntaxe aidera les gens à apprendre le langage en premier lieu. L'éditeur s'attend à ce que la syntaxe du programme de haut niveau devienne plus simple dans les versions ultérieures, comme la suppression des instructions using par défaut.
Voici la version C# 9 de « hello world ».
Code C# : | Sélectionner tout |
1 2 3 | using System; Console.WriteLine("Hello World!"); |
Les programmes de haut niveau peuvent être étendus pour utiliser plus de fonctionnalités, telles que la définition et l'appel d'une méthode ou d'une classe dans le même fichier.
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 25 26 | using System; using System.Runtime.InteropServices; Console.WriteLine("Hello World!"); FromWhom(); Show.Excitement("Top-level programs can be brief, and can grow as slowly or quickly in complexity as you'd like", 8); void FromWhom() { Console.WriteLine($"From {RuntimeInformation.FrameworkDescription}"); } internal class Show { internal static void Excitement(string message, int levelOf) { Console.Write(message); for (int i = 0; i < levelOf; i++) { Console.Write("!"); } Console.WriteLine(); } } |
Ce programme produit la sortie suivante :
Envoyé par sortie
Il s'agit ici de procéder à des tests pour voir si une valeur a une certaine forme et d'extraire des informations de la valeur lorsqu'elle a la forme correspondante. De nouvelles améliorations de pattern matching ont été ajoutées dans les dernières versions de C#.
Voici deux exemples : le premier montre l'utilisation des propriétés dans le pattern matching. Il vérifie la valeur null (avec is) avant de comparer context de l'objet à un modèle (pattern) spécifique.
Code C# : | Sélectionner tout |
1 2 3 4 | if (context is {IsReachable: true, Length: > 1 }) { Console.WriteLine(context.Name); } |
Ce qui est équivalent à :
Code C# : | Sélectionner tout |
1 2 3 4 | if (context is object && context.IsReachable && context.Length > 1 ) { Console.WriteLine(context.Name); } |
Mais est aussi équivalent à :
Code C# : | Sélectionner tout |
1 2 3 4 | if (context?.IsReachable && context?.Length > 1 ) { Console.WriteLine(context.Name); } |
L'exemple suivant utilise des modèles relationnels (comme <, <=) et logiques (comme and, or et not). Le code suivant produit le péage routier (sous forme décimale) pour un camion de livraison en fonction de son poids brut. Pour ceux qui ne sont pas familiers, m après un littéral numérique indique au compilateur que le nombre est sous forme de decimal et non double.
Code C# : | Sélectionner tout |
1 2 3 4 5 6 | DeliveryTruck t when t.GrossWeightClass switch { < 3000 => 8.00m, >= 3000 and <= 5000 => 10.00m, > 5000 => 15.00m, }, |
F# 5
S'appuyant sur les mises à jour de la Preview F# 5 publiées plus tôt cette année, cette dernière mise à jour de F# 5 conclut la prise en charge des langages et ajoute deux nouvelles fonctionnalités, les chaînes interpolées et les déclarations de type ouvert. Voici un aperçu de ce que vous pouvez en faire:
Chaînes interpolées
Les chaînes interpolées en F# sont l'une des fonctionnalités les plus demandées. Les gens qui les connaissent en C# et JavaScript (et peut-être dans d'autres langages) en sont venus à les aimer dans ces langages. En F#, l'éditeur présente des chaînes interpolées de manière non typée comme elles existent dans d'autres langages, mais également avec des trous interpolés typés où l'expression dans un contexte interpolé doit correspondre à un type donné par un spécificateur de format de chaîne.
Code F# : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 | // Basic interpolated string let name = "Phillip" let age = 29 let message = $"Name: {name}, Age: {age}" // Typed interpolation // '%s' requires the interpolation to be of type string // '%d' requires the interpolation to be an integer let message2 = $"Name: %s{name}, Age: %d{age}" |
Déclarations de type ouvert
Les déclarations de type ouvert en F# sont similaires à la possibilité d'ouvrir des classes statiques en C#, mais avec une syntaxe légèrement différente. Elles sont également étendues pour permettre l'ouverture de types spécifiques à F#.
Code F# : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | open type System.Math let x = Min(1.0, 2.0) module M = type DU = A | B | C let someOtherFunction x = x + 1 // Open only the type inside the module open type M.DU printfn "%A" A |
Outils de diagnostic d'exécution
Microsoft.Extensions.Logging
Microsoft a amélioré le fournisseur de journaux de la console dans la bibliothèque Microsoft.Extensions.Logging. Les développeurs peuvent désormais implémenter un ConsoleFormatter personnalisé pour exercer un contrôle complet sur le formatage et la colorisation de la sortie de la console. Les API du formateur permettent un formatage riche en implémentant un sous-ensemble des séquences d'échappement du VT-100 (pris en charge par la plupart des terminaux modernes). L'enregistreur de console peut analyser les séquences d'échappement sur des terminaux non pris en charge, ce qui vous permet de créer un formateur unique pour tous les terminaux.
En plus de la prise en charge des formateurs personnalisés, Microsoft a également ajouté un formateur JSON intégré qui émet des journaux JSON structurés vers la console.
Débogage dump
Le débogage du code managé nécessite une connaissance particulière des objets gérés et des constructions. Le composant d'accès aux données (DAC - Data Access Component) est un sous-ensemble du moteur d'exécution de runtime qui connaît ces constructions et peut accéder à ces objets gérés sans exécution. Depuis la Preview 8, Microsoft a commencé à compiler le DAC Linux sur Windows. Les vidages de processus .NET Core collectés sous Linux peuvent désormais être analysés sous Windows à l'aide de WinDBG ou dotnet dump analyze..
Technologie runtime
De nombreuses nouvelles fonctionnalités ont été ajoutées dans .NET 5.0. Une petite sélection est décrite ci-dessous.
Windows ARM64
Microsoft a ajouté la prise en charge de Windows ARM64 dans le cadre de cette version. L'éditeur a pris la décision relativement tardive de retarder le composant Windows Desktop (Windows Forms, WPF). Windows Forms est presque prêt, mais WPF ne l'est pas, et Microsoft ne veut pas publier seulement la moitié du composant Windows Desktop, en partie parce que les tests ne sont pas effectués dans une configuration fractionnée.
Exportations natives
Vous pouvez désormais exporter des méthodes gérées vers du code natif. Le bloc de construction de la fonctionnalité héberge la prise en charge de l'API pour UnmanagedCallersOnlyAttribute.
Télécharger .NET 5.0 Preview 8
Source : Microsoft