Membres expression-bodied (Guide de programmation C#)

Les définitions de corps d’expression vous permettent de fournir l’implémentation d’un membre sous une forme lisible et très concise. Vous pouvez utiliser une définition de corps d’expression chaque fois que la logique d’un membre pris en charge, comme une méthode ou une propriété, se compose d’une seule expression. La syntaxe générale d’une définition de corps d’expression est la suivante :

member => expression;

expression est une expression valide.

La prise en charge des définitions de corps d’expression a été introduite pour les méthodes et les propriétés en lecture seule dans C# 6 et a été étendue dans C# 7.0. Vous pouvez utiliser des définitions de corps d’expression avec les membres de type listés dans le tableau suivant :

Membre Prise en charge à compter de
Méthode C# 6
Propriété en lecture seule C# 6
Propriété C# 7.0
Constructeur C# 7.0
Finaliseur C# 7.0
Indexeur C# 7.0

Méthodes

Une méthode expression-bodied se compose d’une seule expression qui retourne une valeur dont le type correspond au type de retour de la méthode ou, pour les méthodes qui retournent void, qui effectue une opération. Par exemple, les types qui substituent la méthode ToString incluent généralement une expression unique qui retourne la représentation sous forme de chaîne de l’objet actuel.

L’exemple suivant définit une classe Person qui substitue la méthode ToString avec une définition de corps d’expression. Il définit également une méthode DisplayName qui affiche un nom sur la console. Notez que le mot clé return n’est pas utilisé dans la définition de corps d’expression ToString.

using System;

public class Person
{
   public Person(string firstName, string lastName)
   {
      fname = firstName;
      lname = lastName;
   }

   private string fname;
   private string lname;

   public override string ToString() => $"{fname} {lname}".Trim();
   public void DisplayName() => Console.WriteLine(ToString());
}

class Example
{
   static void Main()
   {
      Person p = new Person("Mandy", "Dejesus");
      Console.WriteLine(p);
      p.DisplayName();
   }
}

Pour plus d’informations, consultez Méthodes (Guide de programmation C#).

Propriétés en lecture seule

Depuis C# 6, vous pouvez utiliser une définition de corps d’expression pour implémenter une propriété en lecture seule. Pour ce faire, utilisez la syntaxe suivante :

PropertyType PropertyName => expression;

L’exemple suivant définit une classe Location dont la propriété en lecture seule Name est implémentée comme une définition de corps d’expression qui retourne la valeur du champ privé locationName :

public class Location
{
   private string locationName;

   public Location(string name)
   {
      locationName = name;
   }

   public string Name => locationName;
}

Pour plus d’informations sur les propriétés, consultez Propriétés (Guide de programmation C#).

Propriétés

Depuis C# 7.0, vous pouvez utiliser des définitions de corps d’expression pour implémenter la propriété get et les accesseurs set. L’exemple suivant montre comment faire :

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   }
}

Pour plus d’informations sur les propriétés, consultez Propriétés (Guide de programmation C#).

Constructeurs

Une définition de corps d’expression pour un constructeur se compose généralement d’une seule expression d’assignation ou d’un appel de méthode qui gère les arguments du constructeur ou qui initialise l’état de l’instance.

L’exemple suivant définit une classe Location dont le constructeur a un seul paramètre de chaîne nommé name. La définition de corps d’expression assigne l’argument à la propriété Name.

public class Location
{
   private string locationName;

   public Location(string name) => Name = name;

   public string Name
   {
      get => locationName;
      set => locationName = value;
   }
}

Pour plus d’informations, consultez Constructeurs (Guide de programmation C#).

Finaliseurs

Une définition de corps d’expression pour un finaliseur contient généralement des instructions de nettoyage, telles que des instructions qui libèrent les ressources non managées.

L’exemple suivant définit un finaliseur qui utilise une définition de corps d’expression pour indiquer que le finaliseur a été appelé.

public class Destroyer
{
   public override string ToString() => GetType().Name;

   ~Destroyer() => Console.WriteLine($"The {ToString()} finalizer is executing.");
}

Pour plus d’informations, consultez Finaliseurs (Guide de programmation C#).

Indexeurs

Comme avec les propriétés, l’indexeur get et set les accesseurs se composent de définitions de corps d’expression si l’accesseur get se compose d’une seule expression qui retourne une valeur ou l’accesseur set effectue une affectation simple.

L’exemple suivant définit une classe nommée Sports qui inclut un tableau String interne contenant les noms de plusieurs sports. Les indexeurs get et set les accesseurs sont implémentés en tant que définitions de corps d’expression.

using System;
using System.Collections.Generic;

public class Sports
{
   private string[] types = { "Baseball", "Basketball", "Football",
                              "Hockey", "Soccer", "Tennis",
                              "Volleyball" };

   public string this[int i]
   {
      get => types[i];
      set => types[i] = value;
   }
}

Pour plus d’informations, consultez Indexeurs (Guide de programmation C#).

Voir aussi