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 Ausdruckskörperdefinitionen wurde für Methoden und schreibgeschützte Eigenschaften in C# 6 eingeführt und in C# 7.0 erweitert.Support for expression body definitions was introduced for methods and read-only properties in C# 6 and was expanded in C# 7.0. 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
Schreibgeschützte EigenschaftRead-only property C# 6C# 6
PropertyProperty C# 7.0C# 7.0
KonstruktorConstructor C# 7.0C# 7.0
FinalizerFinalizer C# 7.0C# 7.0
IndexerIndexer C# 7.0C# 7.0

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 DisplayName-Methode definiert, die einen Namen für die Konsole anzeigt.It also defines a DisplayName 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).

Schreibgeschützte EigenschaftenRead-only properties

Ab C# 6 können Sie Ausdruckskörperdefinitionen zum Implementieren von schreibgeschützten Eigenschaften verwenden.Starting with C# 6, you can use expression body definition to implement a read-only property. Verwenden Sie hierzu die folgende Syntax:To do that, use the following syntax:

PropertyType PropertyName => expression;

Im folgenden Beispiel wird eine Location-Klasse definiert, deren schreibgeschützte Eigenschaft Name als Ausdruckskörperdefinition 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 zu Eigenschaften finden Sie unter Eigenschaften (C#-Programmierhandbuch).For more information about properties, see Properties (C# Programming Guide).

EigenschaftenProperties

Ab C# 7.0 können Sie Ausdruckskörperdefinitionen zum Implementieren von get-Eigenschaften und set-Accessoren verwenden.Starting with C# 7.0, you can use expression body definitions to implement property get and set accessors. Im folgenden Beispiel wird die dafür erforderliche Vorgehensweise veranschaulicht: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;
   } 
}

Weitere Informationen zu Eigenschaften finden Sie unter Eigenschaften (C#-Programmierhandbuch).For more information about properties, see Properties (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) => Name = 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).

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).