Training - Beratung - Projektarbeiten

www.David-Tielke.de

Webcast C# 6.0 - Folge 3: Expression Bodied Function Member

Immer dann, wenn in C# eine Methode oder ein Computed-Property mit nur einem einzigen Statement geschrieben wird, erzeugt dies, bedingt durch den notwendigen Anweisungsblock nach Methoden oder Properties, unnötig viel Code. Ein ähnliches Problem existieren bei den in C# 2.0 eingeführten anonymen Funktionen. In C# 3.0 wurde deshalb mit den Lambdaausdrücken eine Kurzform hinzugefügt, bei der mit Hilfe eines Projektionsoperators, sehr kurze und knappe “Inlinemethoden” geschrieben werden können:

names.Where(n => n.Age >= 18);

Mit C# 6.0 und den “Expression Bodied Function Member”, existiert nun eine solche Variante auch für die direkte Deklarationen von Methoden und berechneten Eigenschaften.

Dazu aus der Projekt Roslyn Webseite:

Lambda expressions can be declared with an expression body as well as a conventional function body consisting of a block. This feature brings the same convenience to function members of types. Expression bodies on method-like members Methods as well as user-defined operators and conversions can be given an expression body by use of the “lambda arrow”:
public Point Move(int dx, int dy) => new Point(x + dx, y + dy); 
public static Complex operator +(Complex a, Complex b) => a.Add(b);
public static implicit operator string(Person p) => p.First + " " + p.Last;
The effect is exactly the same as if the methods had had a block body with a single return statement. For void-returning methods – and Task -returning async methods – the arrow syntax still applies, but the expression following the arrow must be a statement expression (just as is the rule for lambdas):
public void Print() => Console.WriteLine(First + " " + Last);
Expression bodies on property-like function members Properties and indexers can have getters and setters. Expression bodies can be used to write getter-only properties and indexers where the body of the getter is given by the expression body:
public string Name => First + " " + Last;
public Customer this[long id] => store.LookupCustomer(id); 
Note that there is no get keyword: It is implied by the use of the expression body syntax.
Links

Kommentar schreiben

Loading