C# 7 – Stand der Dinge und Ausblick

Seite 3: Record-Typen

Inhaltsverzeichnis

Die Einführung von Record-Typen ist noch interessanter. Entwickler können damit Daten als ein Set von Typen definieren und darauf beliebig viele Funktionen implementieren. Folgende Klassenhierarchie sei gegeben:

class Person
{
public Person(string name)
{
Name = name;
}
  public string Name
{
get;
}
}
class Student : Person
{
public Student(string name, double gpa)
: base(name)
{
Gpa = gpa;
}
  public double Gpa
{
get;
}
}
class Teacher : Person
{
public Teacher(string name, string subject)
: base(name)
{
Subject = subject;
}
  public string Subject
{
get;
}
}

Das Roslyn-Team zieht eine Syntax wie die folgende zur Darstellung der Klasssenhierarchie mittels Records in Betracht:

class Person(string Name);
class Student(string Name, double Gpa) : Person(Name);
class Teacher(string Name, string Subject) : Person(Name);

Record-Typen werden über eine Art Ableitung definiert. Die konkrete Syntax kann sich noch deutlich ändern. Dennoch sollen die beiden Beispiele im folgenden Abschnitt für die Erläuterung des Pattern Matching herangezogen werden.

Ein interessantes neues Feature, das im Kontext der Record-Typen diskutiert wird, ist das with-Schlüsselwort:

Teacher t1 = new Teacher(Name: "Shaldon", Subject: "String Theory");
Teacher t2 = t1 with { Subject = "Engineering" };

Mit diesem Konstrukt können Entwickler ein neues Objekt erzeugen, das dem Ausgangsobjekt gleicht, bei dem aber die Initialisierungsliste einige Werte überschreibt. Unter der Haube generiert das System Code, der folgendermaßen aussieht:

Teacher t2 = new Teacher(Name: t1.Name, Subject: "Engineering");