Nous sommes ravis de vous présenter les nouveautés de .NET 8 Preview 2. Cette version est une suite rapide de la plus grande Preview 1. Vous continuerez à voir de nombreuses autres fonctionnalités apparaître avec ces versions mensuelles. Les utilisateurs de .NET 6 et 7 voudront suivre cette version de près. Nous avons essayé d’en faire un cours de mise à niveau simple.
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 versions de canal de prévisualisation si vous souhaitez essayer .NET 8 avec la famille de produits Visual Studio. La prise en charge de .NET 8 pour Visual Studio pour Mac n’est pas encore disponible.
Jetons un coup d’œil à quelques nouvelles fonctionnalités.
Bibliothèques
Les nouveautés de Preview 2 se trouvent dans les bibliothèques.
Extensions System.ComponentModel.DataAnnotations
Nous avons introduit des extensions aux attributs de validation intégrés dans System.ComponentModel.DataAnnotations.
RequiredAttribute.DisallowAllDefaultValues
attribut AttributRequis permet maintenant de valider que les structures ne sont pas égales à leurs valeurs par défaut. Par exemple :
1 | [Required(DisallowAllDefaultValues = true)] public Guid MyGuidValue { get; set; } |
Cet exemple échouera à la validation si sa valeur est égale Guid.Vide.
Limites exclusives de RangeAttribute
Les utilisateurs peuvent désormais spécifier des limites exclusives dans leur validation de plage :
1 | [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.
AttributLongueur
attribut AttributLongueur peut désormais être utilisé pour définir des limites inférieures et supérieures pour les chaînes ou les collections :
1 | [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 valider une propriété :
1 | [AllowedValues("apple", "banana", "mango")] public string Fruit { get; set; } [DeniedValues("pineapple", "anchovy", "broccoli")] public string PizzaTopping { get; set; } |
AttributBase64StringBase64StringAttributeBase64StringAttribute
Comme son nom l'indique, cet attribut valide 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
Des 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 des métadonnées de pointeur de fonction via Reflection, y compris les types de paramètres, le type de retour et les conventions d'appel. Auparavant, le type IntPtr a été utilisé pour un type de pointeur de fonction tel que Type de(déléguer*<annuler>()) 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 implémentée dans le runtime CoreCLR et dans MetadataLoadContext. La prise en charge des environnements d'exécution Mono et NativeAOT est prévue pour l'avenir.
Un exemple utilisant la réflexion :
1 | 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 fonction (par exemple déléguer*<annuler>[]) sont pris en charge. Ainsi, la propriété Type.ElementType et la méthode Type.GetGenericArgumentsType.GetGenericArguments() peut être utilisé pour obtenir d'autres types qui peuvent finalement être des pointeurs de fonction. En outre, un type de paramètre de pointeur de fonction peut être un autre type de pointeur de fonction.
Conclusion
.NET 8 Preview 2 propose 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 le biais de contributions de code, de rapports de bogues ou de commentaires. Vos contributions ont joué un rôle déterminant dans la réalisation des aperçus 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 toi ?
Qu'en penses-tu ?
Voir aussi :
Microsoft publie .NET 8 Preview 1, le premier aperçu de la nouvelle version du framework, et ajoute plusieurs nouvelles fonctionnalités, notamment l'extension de Native AOT plus de scénarios et la prise en charge de Linux
Microsoft dévoile les mises à jour ASP.NET Core dans .NET 8 Preview 2, y compris l'ajout de Blazor QuickGrid et plusieurs améliorations de performances
.NET 7 est désormais disponible en tant que plate-forme de développement unifiée de Microsoft et apporte des améliorations pour .NET MAUI et la prise en charge de .NET pour ARM64