Améliorations de C# 11 pour les chaînes, les modèles de liste et la création d’objets

Améliorations de C# 11 pour les chaînes, les modèles de liste et la création d’objets

Dans le cadre du lancement de .NET 7, Microsoft a dévoilé le 8 novembre les nouvelles fonctionnalités de C# 11, la dernière version du célèbre langage de programmation .NET. Les améliorations les plus importantes incluent des améliorations de chaînes, des abstractions de méthodes statiques, des modèles de liste et des membres requis pour la création d’objets.

Les littéraux de chaîne bruts permettent d’incorporer des chaînes avec des caractères spéciaux ou des chaînes s’étendant sur plusieurs lignes. Dans les versions précédentes de .NET, les développeurs devaient échapper les caractères spéciaux tels que les guillemets doubles. En C# 11, plusieurs guillemets doubles marquent le début et la fin d’une chaîne brute. Les littéraux de chaîne bruts peuvent être combinés avec une interpolation de chaîne à l’aide du caractère $.

string longMessage = """
   This is a long message.
   It has several lines.
   Some are indented
        more than others.
   Some should start at the first column.
   Some have "quoted text" in them.
   """;

Les interpolations de chaînes peuvent désormais s’étendre sur plusieurs lignes, ce qui permet des expressions d’interpolation complexes telles que les instructions switch.

string message = $"The usage policy for {safetyScore} is {
    safetyScore switch
    {
        > 90 => "Unlimited usage",
        > 80 => "General usage, with daily safety check",
        > 70 => "Issues must be addressed within 1 week",
        > 50 => "Issues must be addressed within 1 day",
        _ => "Issues must be addressed before continued use",
    }
  }";

Une petite mise à jour pour les chaînes en C# 11 est la possibilité de spécifier rapidement un littéral de chaîne encodé en UTF-8, au lieu de l’encodage UTF-16 par défaut de .NET, en y ajoutant un suffixe u8. Il crée une représentation ReadOnlySpan de la chaîne. UTF-8 est généralement utilisé dans les protocoles standard du Web tels que l’authentification.

ReadOnlySpan AuthStringLiteral = "AUTH "u8;

Les abstractions de méthodes statiques en C# 11 permettent aux développeurs de décrire des méthodes abstraites statiques dans les interfaces, ce qui permet d’écrire des méthodes d’analyse génériques. L’équipe .NET 7 a utilisé cette fonctionnalité pour ajouter la prise en charge de la généralisation des expressions mathématiques dans les interfaces.

La capacité de correspondance de modèle des expressions .NET a été mise à jour pour prendre en charge les modèles de liste. Alors que la correspondance de modèles existante s’est concentrée sur les propriétés d’un seul paramètre, les modèles de liste permettent de faire correspondre une séquence de modèles à une liste d’éléments.

int[] numbers = { 1, 2, 3 };

Console.WriteLine(numbers is [1, 2, 3]);  // True
Console.WriteLine(numbers is [1, 2, 4]);  // False
Console.WriteLine(numbers is [1, 2, 3, 4]);  // False
Console.WriteLine(numbers is [0 or 1, <= 2, >= 3]);  // True

La correspondance de modèles de liste est utilisée par la bibliothèque de classes de base .NET 7 dans les interfaces mathématiques génériques mentionnées précédemment.

Les appels d’initialisation d’objet sont améliorés avec le nouveau mot-clé required pour les propriétés de classe. C# 11 lèvera une exception au moment de la compilation lors de la création d’une instance de la classe sans fournir de valeurs pour les membres requis, que ce soit dans le constructeur ou dans l’initialiseur d’objet. Il s’agirait de la nouvelle fonctionnalité préférée de C# 11 parmi les développeurs.

public class Person {
  public required string FirstName { get; set; }
  public string LastName { get; set; }
}

var p1 = new Person(); // Not valid
var p2 = new Person() { FirstName = "Edin" }; // Valid

Pour les cas particuliers tels que les enregistrements positionnels, il existe un attribut SetsRequiredMembers pour ignorer les vérifications du compilateur pour les propriétés requises.

Bien que ces nouvelles fonctionnalités pour C# 11 soient disponibles dans .NET 7, elles peuvent être testées dans .NET 6 à l’aide du paramètre de projet LangVersion pour prévisualiser.

.

Leave a Comment

Your email address will not be published. Required fields are marked *