Vous pouvez télécharger .NET 8 Preview 2 pour Linux, macOS et Windows.
.NET 8 a été testé avec la version 17.6 Preview 2. Nous vous recommandons d'utiliser les builds du canal de prévisualisation si vous souhaitez essayer .NET 8 avec la famille de produits Visual Studio. La prise en charge de .NET 8 par Visual Studio pour Mac n'est pas encore disponible.
Jetons un coup d'œil à quelques nouvelles fonctionnalités.
Bibliothèques
Les nouvelles fonctionnalités de la Preview 2 se trouvent dans les bibliothèques.
Extensions de System.ComponentModel.DataAnnotations
Nous avons introduit des extensions aux attributs de validation intégrés dans System.ComponentModel.DataAnnotations.
RequiredAttribute.DisallowAllDefaultValues
L'attribut RequiredAttribute permet désormais de valider que les structures ne sont pas égales à leurs valeurs par défaut. Par exemple :
Code : | Sélectionner tout |
1 2 | [Required(DisallowAllDefaultValues = true)] public Guid MyGuidValue { get; set; } |
Cet exemple échouera à la validation si sa valeur est égale à Guid.Empty.
Limites exclusives de RangeAttribute
Les utilisateurs peuvent désormais spécifier des bornes exclusives dans leur validation de plage :
Code : | Sélectionner tout |
1 2 | [Range(0d, 1d, MinimumIsExclusive = true, MaximumIsExclusive = true)] public double Sample { get; set; } |
Cet attribut accepte toutes les valeurs de l'intervalle ouvert mais rejette les valeurs limites 0 et 1.
LengthAttribute
L'attribut LengthAttribute peut désormais être utilisé pour définir les limites inférieures et supérieures des chaînes ou des collections :
Code : | Sélectionner tout |
1 2 | [Length(10, 20)] // Require at least 10 elements and at most 20 elements. public ICollection<int> Values { get; set; } |
AllowedValuesAttribute et DeniedValuesAttribute
Ces attributs peuvent être utilisés pour spécifier des listes d'autorisation et de refus pour la validation d'une propriété :
Code : | Sélectionner tout |
1 2 3 4 5 | [AllowedValues("apple", "banana", "mango")] public string Fruit { get; set; } [DeniedValues("pineapple", "anchovy", "broccoli")] public string PizzaTopping { get; set; } |
Base64StringAttribute
Comme son nom l'indique, cet attribut permet de valider qu'une chaîne donnée est une représentation Base64 valide.
System.Reflection : prise en charge de l'introspection pour les pointeurs de fonction
Les pointeurs de fonction ont été ajoutés dans le cadre de .NET 5 et C# 9, mais nous n'avons pas ajouté d'expérience correspondante pour la fonctionnalité dans Reflection. Cette nouvelle fonctionnalité permet d'obtenir les métadonnées des pointeurs de fonction via Reflection, notamment les types de paramètres, le type de retour et les conventions d'appel. Auparavant, le type IntPtr était utilisé pour un type de pointeur de fonction tel que typeof(delegate*<void>()) ou lors de l'obtention d'un type de pointeur de fonction par réflexion tel que FieldInfo.FieldType.
Une instance de pointeur de fonction, qui est l'adresse physique d'une fonction, continue d'être représentée comme un IntPtr ; seul le type de réflexion a été modifié avec cette fonctionnalité. Cette nouvelle fonctionnalité est actuellement mise en œuvre dans le moteur d'exécution CoreCLR et dans MetadataLoadContext. La prise en charge des runtimes Mono et NativeAOT est prévue ultérieurement.
Un exemple utilisant la réflexion :
Code : | 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | FieldInfo fieldInfo = typeof(MyClass).GetField(nameof(MyClass._fp)); // Obtain the function pointer type from a field. This used to be the 'IntPtr' type, now it's 'Type': Type fpType = fieldInfo.FieldType; // New methods to determine if a type is a function pointer: Console.WriteLine(fpType.IsFunctionPointer); // True Console.WriteLine(fpType.IsUnmanagedFunctionPointer); // True // New methods to obtain the return and parameter types: Console.WriteLine($"Return type: {fpType.GetFunctionPointerReturnType()}"); // System.Void foreach (Type parameterType in fpType.GetFunctionPointerParameterTypes()) { Console.WriteLine($"Parameter type: {parameterType}"); // System.Int32& } // Access to custom modifiers and calling conventions requires a "modified type": Type modifiedType = fieldInfo.GetModifiedFieldType(); // A modified type forwards most members to its underlying type which can be obtained with Type.UnderlyingSystemType: Type normalType = modifiedType.UnderlyingSystemType; // New methods to obtain the calling conventions: foreach (Type callConv in modifiedType.GetFunctionPointerCallingConventions()) { Console.WriteLine($"Calling convention: {callConv}"); // System.Runtime.CompilerServices.CallConvSuppressGCTransition // System.Runtime.CompilerServices.CallConvCdecl } // New methods to obtain the custom modifiers: foreach (Type modreq in modifiedType.GetFunctionPointerParameterTypes()[0].GetRequiredCustomModifiers()) { Console.WriteLine($"Required modifier for first parameter: {modreq }"); // System.Runtime.InteropServices.InAttribute } // Sample class that contains a function pointer field: public unsafe class MyClass { public delegate* unmanaged[Cdecl, SuppressGCTransition]<in int, void> _fp; } |
Les types paramétrés, y compris les types génériques, les pointeurs et les tableaux tels qu'un tableau de pointeurs de fonctions (par exemple delegate*<void>[]) sont pris en charge. Ainsi, la propriété Type.ElementType et la méthode Type.GetGenericArguments() peuvent être utilisées pour obtenir d'autres types qui, en fin de compte, peuvent être des pointeurs de fonction. En outre, un type de paramètre pointeur de fonction est autorisé à être un autre type de pointeur de fonction.
Conclusion
L'avant-première 2 de .NET 8 offre une gamme courte mais passionnante de mises à jour de thèmes, de nouvelles fonctionnalités et d'améliorations.
Nous tenons à remercier sincèrement tous ceux qui ont contribué à .NET 8 jusqu'à présent, que ce soit par des contributions au code, des rapports de bogues ou des commentaires. Vos contributions ont joué un rôle déterminant dans la réalisation des avant-premières de .NET 8, et nous sommes impatients de continuer à travailler ensemble pour construire un avenir meilleur pour .NET et l'ensemble de la communauté technologique.
Source : Microsoft
Et vous ?
Qu'en pensez-vous ?
Voir aussi :
Microsoft publie .NET 8 Preview 1, le premier aperçu de la nouvelle version du framework, et ajoute plusieurs nouveautés dont l'extension de Native AOT à plus de scénarios et le support pour Linux
Microsoft dévoile les mises à jour apportées à ASP.NET Core dans .NET 8 Preview 2, dont l'ajout de Blazor QuickGrid et de plusieurs améliorations de performance
.NET 7 est maintenant disponible en tant que plateforme de développement unifiée de Microsoft, et apporte des améliorations pour .NET MAUI et le support de .NET pour ARM64