Membres expression-bodied (Guide de programmation C#)Expression-bodied members (C# programming guide)

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.Expression body definitions let you provide a member's implementation in a very concise, readable form. 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.You can use an expression body definition whenever the logic for any supported member, such as a method or property, consists of a single expression. La syntaxe générale d’une définition de corps d’expression est la suivante :An expression body definition has the following general syntax:

member => expression;

expression est une expression valide.where expression is a valid expression.

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.Support for expression body definitions was introduced for methods and read-only properties in C# 6 and was expanded in C# 7.0. Vous pouvez utiliser des définitions de corps d’expression avec les membres de type listés dans le tableau suivant :Expression body definitions can be used with the type members listed in the following table:

MembreMember Prise en charge à compter deSupported as of...
MéthodeMethod C# 6C# 6
Propriété en lecture seuleRead-only property C# 6C# 6
PropertyProperty C# 7.0C# 7.0
ConstructeurConstructor C# 7.0C# 7.0
FinaliseurFinalizer C# 7.0C# 7.0
IndexeurIndexer C# 7.0C# 7.0

MéthodesMethods

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.An expression-bodied method consists of a single expression that returns a value whose type matches the method's return type, or, for methods that return void, that performs some operation. 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.For example, types that override the ToString method typically include a single expression that returns the string representation of the current object.

L’exemple suivant définit une classe Person qui substitue la méthode ToString avec une définition de corps d’expression.The following example defines a Person class that overrides the ToString method with an expression body definition. Il définit également une méthode DisplayName qui affiche un nom sur la console.It also defines a DisplayName method that displays a name to the console. Notez que le mot clé return n’est pas utilisé dans la définition de corps d’expression ToString.Note that the return keyword is not used in the ToString expression body definition.

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#).For more information, see Methods (C# Programming Guide).

Propriétés en lecture seuleRead-only properties

Depuis C# 6, vous pouvez utiliser une définition de corps d’expression pour implémenter une propriété en lecture seule.Starting with C# 6, you can use expression body definition to implement a read-only property. Pour ce faire, utilisez la syntaxe suivante :To do that, use the following syntax:

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 :The following example defines a Location class whose read-only Name property is implemented as an expression body definition that returns the value of the private locationName field:

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#).For more information about properties, see Properties (C# Programming Guide).

PropriétésProperties

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.Starting with C# 7.0, you can use expression body definitions to implement property get and set accessors. L’exemple suivant montre comment faire :The following example demonstrates how to do that:

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#).For more information about properties, see Properties (C# Programming Guide).

ConstructeursConstructors

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.An expression body definition for a constructor typically consists of a single assignment expression or a method call that handles the constructor's arguments or initializes instance state.

L’exemple suivant définit une classe Location dont le constructeur a un seul paramètre de chaîne nommé name.The following example defines a Location class whose constructor has a single string parameter named name. La définition de corps d’expression assigne l’argument à la propriété Name.The expression body definition assigns the argument to the Name property.

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#).For more information, see Constructors (C# Programming Guide).

FinaliseursFinalizers

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.An expression body definition for a finalizer typically contains cleanup statements, such as statements that release unmanaged resources.

L’exemple suivant définit un finaliseur qui utilise une définition de corps d’expression pour indiquer que le finaliseur a été appelé.The following example defines a finalizer that uses an expression body definition to indicate that the finalizer has been called.

using System;

public class Destroyer
{
   public override string ToString() => GetType().Name;
   
   ~Destroyer() => Console.WriteLine($"The {ToString()} destructor is executing.");
}

Pour plus d’informations, consultez Finaliseurs (Guide de programmation C#).For more information, see Finalizers (C# Programming Guide).

IndexeursIndexers

Comme les propriétés, les accesseurs get et set d’un indexeur sont composés de définitions de corps d’expression si l’accesseur get est constitué d’une seule instruction qui retourne une valeur ou si l’accesseur set effectue une assignation simple.Like properties, an indexer's get and set accessors consist of expression body definitions if the get accessor consists of a single statement that returns a value or the set accessor performs a simple assignment.

L’exemple suivant définit une classe nommée Sports qui inclut un tableau String interne contenant les noms de plusieurs sports.The following example defines a class named Sports that includes an internal String array that contains the names of a number of sports. Les accesseurs get et set de l’indexeur sont implémentés en tant que définitions de corps d’expression.Both the indexer's get and set accessors are implemented as expression body definitions.

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#).For more information, see Indexers (C# Programming Guide).