Ausdruckskörpermember (C#-Programmierhandbuch)Expression-bodied members (C# programming guide)

Mit Ausdruckstextdefinitionen können Sie die Implementierung eines Members in einer sehr präzisen und lesbaren Form darstellen.Expression body definitions let you provide a member's implementation in a very concise, readable form. Sie können eine Ausdruckstextdefinition verwenden, wann immer die Logik für einen unterstützten Member, z.B. eine Methode oder Eigenschaft, aus einem einzelnen Ausdruck besteht.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. Eine Ausdruckstextdefinition hat die folgende allgemeine Syntax:An expression body definition has the following general syntax:

member => expression;

wobei expression ein gültiger Ausdruck ist.where expression is a valid expression.

Die Unterstützung für Ausdruckstextdefinitionen wurde für Methoden und Get-Eigenschaftenzugriffsmethoden in C# 6 eingeführt und in C# 7 erweitert.Support for expression body definitions was introduced for methods and property get accessors in C# 6 and was expanded in C# 7. Ausdruckstextdefinitionen können mit Typmember verwendet werden, die in der folgenden Tabelle aufgeführt sind:Expression body definitions can be used with the type members listed in the following table:

MemberMember Unterstützt ab...Supported as of...
MethodeMethod C# 6C# 6
KonstruktorConstructor C# 7C# 7
FinalizerFinalizer C# 7C# 7
Get-Methode der EigenschaftProperty Get C# 6C# 6
Set-Methode der EigenschaftProperty Set C# 7C# 7
IndexerIndexer C# 7C# 7

MethodenMethods

Eine Ausdruckskörpermethode besteht aus einem einzelnen Ausdruck, der einen Wert zurückgibt, dessen Typ mit dem Rückgabetyp der Methode übereinstimmt bzw. für Methoden, die void zurückgeben, das einige Vorgänge ausführt.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. Beispielsweise enthalten Typen, die die ToString-Methode außer Kraft setzen normalerweise einen einzelnen Ausdruck, der die Zeichenfolgendarstellung des aktuellen Objekts zurückgibt.For example, types that override the ToString method typically include a single expression that returns the string representation of the current object.

Das folgende Beispiel definiert eine Person-Klasse, die die ToString-Methode mit einer Ausdruckstextmethode außer Kraft setzt.The following example defines a Person class that overrides the ToString method with an expression body definition. Es wird auch eine Show-Methode definiert, die einen Namen für die Konsole anzeigt.It also defines a Show method that displays a name to the console. Beachten Sie, dass das Schlüsselwort return nicht in der Ausdruckstextmethode ToString verwendet wird.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();
   }
}

Weitere Informationen finden Sie unter Methoden (C#-Programmierhandbuch).For more information, see Methods (C# Programming Guide).

KonstruktorenConstructors

Eine Ausdruckstextdefinition für einen Konstruktor enthält in der Regel einen einzelnen Zuweisungsausdruck oder einen Methodenaufruf, der die Argumente des Konstruktors behandelt oder den Instanzzustand initialisiert.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.

Im folgenden Beispiel wird eine Location-Klasse definiert, deren Klassenkonstruktor einen einzelnen Zeichenfolgenparameter namens name enthält.The following example defines a Location class whose constructor has a single string parameter named name. Die Ausdruckstextdefinition weist das Argument für die Eigenschaft Name zu.The expression body definition assigns the argument to the Name property.

public class Location
{
   private string locationName;
   
   public Location(string name) => locationName = name;

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

Weitere Informationen finden Sie unter Konstruktoren (C#-Programmierhandbuch).For more information, see Constructors (C# Programming Guide).

FinalizerFinalizers

Eine Ausdruckstextdefinition für einen Finalizer enthält normalerweise Bereinigungsanweisungen, z.B. Anweisungen, die nicht verwaltete Ressourcen veröffentlichen.An expression body definition for a finalizer typically contains cleanup statements, such as statements that release unmanaged resources.

Im folgenden Beispiel wird ein Finalizer definiert, der eine Ausdruckstextdefinition verwendet, um anzugeben, dass der Finalizer aufgerufen wurde.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.");
}

Weitere Informationen finden Sie unter Finalizer (C#-Programmierhandbuch).For more information, see Finalizers (C# Programming Guide).

Anweisungen der Get-Methode der EigenschaftProperty get statements

Wenn Sie selbst einen Accessor der Get-Methode der Eigenschaft implementieren möchten, können Sie eine Ausdruckstextdefinition für Eigenschaftswerte verwenden, die den Eigenschaftswert einfach zurückgeben.If you choose to implement a property get accessor yourself, you can use an expression body definition for single expressions that simply return the property value. Beachten sie, dass die Anweisung return nicht verwendet wird.Note that the return statement isn't used.

Im folgenden Beispiel wird eine Location.Name-Anweisung definiert, deren Accessor der Get-Methode der Eigenschaft den Wert des privaten locationName-Felds zurückgibt, das hinter der Eigenschaft liegt.The following example defines a Location.Name property whose property get accessor returns the value of the private locationName field that backs the property.

public class Location
{
   private string locationName;
   
   public Location(string name) => locationName = name;

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

Schreibgeschützte Eigenschaften, die eine Ausdruckstextdefinition verwenden, können ohne explizite set-Anweisung implementiert werden.Read-only properties that use an expression body definition can be implemented without an explicit set statement. Die Syntax lautet:The syntax is:

PropertyName => returnValue;

Das folgende Beispiel definiert eine Location-Klasse, deren schreibgeschützte Eigenschaft Name als Ausdruckstextdefinition implementiert wird, die den Wert des privaten locationName-Felds zurückgibt.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;
}

Weitere Informationen finden Sie unter Eigenschaften (C#-Programmierhandbuch).For more information, see Properties (C# Programming Guide).

Anweisungen der Set-Methode der EigenschaftProperty set statements

Wenn Sie selbst einen Accessor der Set-Methode der Eigenschaft implementieren möchten, können Sie eine Ausdruckstextdefinition für einen Ausdruck mit nur einer Zeile verwenden, der dem Feld einen Wert zuweist, das hinter der Eigenschaft steht.If you choose to implement a property set accessor yourself, you can use an expression body definition for a single-line expression that assigns a value to the field that backs the property.

Im folgenden Beispiel wird eine Location.Name-Eigenschaft definiert, deren Set-Methode der Eigenschaft das Eingabeargument dem privaten locationName-Feld zuweist, das hinter der Eigenschaft steht.The following example defines a Location.Name property whose property set statement assigns its input argument to the private locationName field that backs the property.

public class Location
{
   private string locationName;
   
   public Location(string name) => locationName = name;

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

Weitere Informationen finden Sie unter Eigenschaften (C#-Programmierhandbuch).For more information, see Properties (C# Programming Guide).

IndexerIndexers

Genauso wie Eigenschaften bestehen die Accessoren der Get- und Set-Methode des Indexers aus Ausdruckstextdefinitionen, wenn der Get-Accessor aus einer einzelnen Anweisung besteht, die einen Wert zurückgibt, oder der Set-Accessor führt eine einfache Zuweisung aus.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.

Im folgenden Beispiel wird eine Klasse namens Sports definiert, die ein internes String-Array enthält, das aus den Namen von verschiedenen Sportarten besteht.The following example defines a class named Sports that includes an internal String array that contains the names of a number of sports. Die Get- und Set-Accessoren des Indexers werden als Ausdruckstextdefinitionen implementiert.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;
   }
}

Weitere Informationen finden Sie unter Indexer (C#-Programmierhandbuch).For more information, see Indexers (C# Programming Guide).