IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Microsoft publie .NET 8 Preview 2, le second aperçu de la dernière version du framework
Et apporte plusieurs nouvelles fonctionnalités dans les bibliothèques

Le , par Anthony

1PARTAGES

5  0 
Nous sommes ravis de vous présenter les nouveautés de .NET 8 Preview 2. Cette version est un suivi rapide de l'aperçu 1, plus volumineux. Vous continuerez à voir beaucoup plus de fonctionnalités apparaître avec ces versions mensuelles. Les utilisateurs de .NET 6 et 7 voudront suivre cette version de près. Nous nous sommes efforcés de faire en sorte qu'il s'agisse d'un parcours 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 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

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de daerlnaxe
Membre éprouvé https://www.developpez.com
Le 01/04/2024 à 9:49
Je viens de tester, je ne m'y retrouve absolument plus du tout.

Je ne sais pas s'il me manque des éléments, les pages d'aide n'ont pas suivi sur le site de ce que je vois. Magnifique !!!

De simples custom command pour wpf ont déclenché un enfer.
0  0