Skip to content
Tags

,

C# 6 Auto Property Initializers und Getter-only Auto Properties

Januar 13, 2015

C# 6 bringt zahlreiche neue Features in der Sprache. Dieser Artikel beschreibt neue Features bei den Auto Property Intializers und Getter-only Auto Properties.

Sharp right
© Liquidphoto | Dreamstime.comSharp Right Turn Sign Photo

C# ist eine Programmiersprache die laufend Änderungen unterworfen ist. C# ist dabei keine pure Objekt-orientierte Programmiersprache, und auch keine Funtionsorientiertte Sprache. Diese Sprache wird aber von all diesen Programmier-Paradigmen beeinflusst. Das was praktisch ist kommt auch in diese Sprache hinein.

Wenn wir da in die Vergangenheit blicken: mit C# 2 sind generics neu gekommen, C# 3 brachte zahlreiche Syntaxerweiterungen für Language Integrated Query (LINQ) und hat fast jede (oder jede) Applikation beeinflusst. Die Neuigkeiten bei C# 4 waren dann bei einigen Szenarien wie der Integration von Scripting oder auch COM praktisch. Mit Version 5 gab es dann zwar nur zwei neue Keywords, die waren aber so wichtig und haben die asynchrone Programmierung vereinfacht dass sie wieder praktisch jedes Programm beeinflussten.

Version 6 bringt jetzt keine so wichtige Features wie wir das bei den Neuerungen der Vorgängerversion erleben durften. Aber dafür gibt es viele praktische Dinge. Da legen wir gleich mit den neuen Auto Property Initializers los.

Bei C# 5 konnten Auto properties nur im Constructor initialisiert werden:

public class Sample1
{
  public Sample1()
  {
    IsTrue = true;
  }
  public bool IsTrue { get; set; }
}

Mit C# 6 können Auto properties direkt mit der Property initalisiert werden:

public class Sample1
{
  public bool IsTrue { get; set; } = true;
}

Wie sinnvoll ist das wirklich? Ein Problem dabei ist dass direkt bei der Property nur Konstante für die Initialiserung verwendet werden können. Damit reduziert sich der praktische Anwendungsfall doch. Während der Entwicklungsphase von C# 6 gab es auch noch Primary Constructors die sich als wirklich praktisch für die Initialiserung dieser Properties herausgestellt hatten. Die haben es aber nicht zum Release geschafft, werden aber sicher in anderer Form in einer zukünftigen C# Version kommen. Damit ist dieses Feature zur Initialisierung nur ein Kleines.

Was aber mit automatic properties auch jetzt schon sehr praktisch ist, sind read-only properties bei automatic properties. Bei C# 5 war der lange Property Syntax notwendig um read-only properties zu definieren:

public class Gadget
{
  public Gadget(int i, string name)
  {
    _i = i;
    _name = name;
  }

  private readonly int _i;
  public int I
  {
    get { return _i; }
  }

  private readonly string _name;
  public string Name
  {
    get { return _name; }
  }
}

Dafür war es schon notwendig eine Menge Code zu schreiben. Stattdessen wurden oft automatic properties mit einem private set Accessor eingesetzt:

public class Gadget
{
  public Gadget(int i, string name)
  {
    I = i;
    Name = name;
  }

  public string I { get; private set; }
  public string Name { get; private set; }
}

Das ist zwar viel kürzer. Der Nachteil ist aber das es sich nicht um eine readonly Property handelt. Diese Property kann jederzeit – wenn auch nur innerhalb der Klasse – geändert werden.

Mit C# 6 können jetzt automatic properties auch mit nur einem get Accessor deklariert werden. Dabei wird vom Compiler ein readonly field erzeugt. Die Initialisierung der Property ist dabei auch gleich viel praktischer. Und wenn für die Initialiserung keine Konstante möglich ist, ist die Initialiserung auch im Constructor möglich.

public string Name { get; } = "Sample";

Auto Property Initializers und Getter-only Auto properties sind nur zwei der zahlreichen Features von C# 6. Zum Beispiel über Null Propagation habe ich bereits geschrieben. Neben Blog Artikeln gibt es diese Features auch in meinen Workshops (Firmenkurse als auch offene Kurse)
Programmieren mit C# (23. März 2014 in Wien)

Take off to .NET 2015 (9. Februar 2014 in Wien),

und natürlich auch im Buch Professional C# 6 an dem ich gerade arbeite.

Christian

CN innovation

Schreibe einen Kommentar

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: