Die Syntax von automatisch implementierten Eigenschaften ist nicht wirklich kompliziert. Mit C# in der Sprachversion 6.0 sind einige Neuerungen insbesondere für die Initialisierung hinzu gekommen.
Seit C# 3.0 konntest du einfach eine Eigenschaft ohne explizite Definition von get
und set
machen:
public class Eigenschaft
{
public int AutoEigenschaft { get; set; }
public int AutoEigenschaftNurLesbar { get; private set; }
}
Ab C# 6.0, also .NET 4.6, gibt es auch die Möglichkeit, dass du eine automatisch implementierte Eigenschaft nur mit get
definierst. Dann wird, die vom Compiler automatisch generierte Variable, die den Wert deiner Eigenschaft hält, als readonly
angelegt. Außerdem ist es nun auch möglich, dass du einfach einen Initialwert definierst.
Somit kannst du einfach einen zur Laufzeit nicht veränderbaren Datentypen mit automatisch implementierten Eigenschaften erstellen:
public class ValueObject
{
public int UnveraenderbareEigenschaft { get; } = 42;
}
Vielleicht wunderst du dich wofür eine Eigenschaft mit Konstante gut sein soll. Die Entwickler von C# 6.0 haben es daher auch ermöglicht die Initialisierung im Konstruktor zu machen:
public class ValueObject
{
public int UnveraenderbareEigenschaft { get; }
public ValueObject(int wert)
{
UnveraenderbareEigenschaft = wert;
}
}
Du kannst auch die get
Methode mit anonymer Methode und Lambda-Ausdruck definieren:
public class ValueObject
{
public int UnveraenderbareEigenschaft { get; } = 42;
public double Kehrwert => 1 / ((double)UnveraenderbareEigenschaft);
}
Dies ist vielleicht ein wenig gewöhnungsbedürftig und du solltest auch genau überlegen wie du eine solche Eigenschaft einsetzt. Denn obwohl es offenbar eine Eigenschaft nur mit get
ist, kann sich der Wert verändern. Ich habe keine genau Definition gefunden was bei der Verwendung von Lambda bei nur get
Eigenschaften passieren soll. Allerdings ist es so, dass du teilweise überraschende Ergebnisse bekommst, wenn du Abhängigkeiten zwischen Eigenschaften einführst. Insbesondere, wenn du Eigenschaften mit get
und set
und solche mit nur get
kombinierst.
Jetzt erstmal viel Spaß beim experimentieren mit automatisch implementierten Eigenschaften in C# 6.0
Jan
Merke
- C# 6.0 erlaubt die Definition von Eigenschaften nur mit der
get
Methode. - Wenn du eine Eigenschaft nur mit
get
definierst, dann legt der Compiler den Speicherplatz dafür alsreadonly
an. - Alle Arten von automatisch implementierten Eigenschaften können bei der Definition oder im Konstruktor initialisiert werden.
- Anstelle der vom Compiler automatisch implementierten
get
Methode, kannst du auch einen Lambda-Ausdruck verwenden. - Die Definition einer
private set
Methode ist immer noch möglich.
Lernquiz
Verwende folgende Fragen um das gelernte von heute zu festigen:
- Wie definierst du eine automatisch implementierte Eigenschaft mit Initialwert?
- Kann der Wert einer automatisch implementierten Eigenschaft mit nur
get
verändert werden? - Wie kannst du Lambda-Ausdrücke in Eigenschaften verwenden?
Am besten du schaust dir morgen und dann nochmal in ein paar Tagen die vorherigen Fragen an und beantwortest sie ohne den Text vorher gelesen zu haben.
Weitere Informationen
- Den kompletten Quellcode zum heutigen Lernmoment findest du hier.