zurück zum Artikel

nameof()-Operator in C# 6.0

Der Dotnet-Doktor

Der neue C#-Operator nameof() bringt Typsicherheit in allen Fällen, wo bisher der Name eines Typs, eines Klassenmitglieds, eines Namensraums oder einer Variablen als Zeichenkette zu verwenden war.

In Visual Studio 14 CTP 3[1] findet man auch die aktuellen Prototypen der kommenden Features von C# 6.0[2]. Kürzlich ergänzt hat Microsoft den Operator nameof(x), der den Namen des Operanden x liefert. Erlaubt als Operand x sind:

Dabei wird von nameof() immer nur der relative Name geliefert. Übergeordnete Namensräume bzw. Typnamen bleiben unberücksichtigt:

Console.WriteLine(nameof(Kunde)); // Liefert Kunde für die Klasse Kunde
Console.WriteLine(nameof(kunde)); // Liefert kunde für die Variable kunde
Console.WriteLine(nameof(Kunde.Ort)); // Liefert Ort
Console.WriteLine(nameof(Kunde.ToString)); // Liefert ToString
Console.WriteLine(nameof(List)); // Liefert List
Console.WriteLine(nameof(ITVisions.Demo)); // liefert Demo (Namensraum)

Sehr sinnvoll ist dieses Feature für Dependency-Property-Deklarationen, PropertyChanged-Ereignisse, ArgumentNull-Fehler und alle anderen Situationen, wo man im Programmcode bisher eine Zeichenkette angeben musste. In allen diesen Fällen bringt der nameof()-Operator nun Typsicherheit und Refactoring-Unterstützung.

Beispiel 1:

// alt (vor C# 6.0)
if (kunde == null) throw new ArgumentNullException("kunde");

// C# 6.0
if (kunde == null) throw new ArgumentNullException(nameof(kunde));

Beispiel 2:

// alt (vor C# 6.0)
public static readonly DependencyProperty OrtProperty =
DependencyProperty.Register("Ort", typeof(string),
typeof(Kunde));

// C# 6.0
public static readonly DependencyProperty LandProperty =
DependencyProperty.Register(nameof(Land), typeof(string),
typeof(Kunde));

Dieses Feature hatte die Nutzergemeinde immer wieder gefordert, z.B. hier[3], hier[4] und hier[5]. Während Microsoft in der Vergangenheit die Implementierung immer abgelehnt hat (Begründung[6]: "keep the number of new langauge features at a manageable level"), hat Microsoft nun nachgegeben, zumal die neue .NET Compiler Platform "Roslyn" die Implementierung neuer Sprachfeatures vereinfacht. Details zu nameof() findet man in den Design Meeting Notes des C#-Teams vom 9. Juli 2014[7].

Noch ist C# 6.0 eine Vorabversion. Einen konkreten Erscheinungstermin gibt es noch nicht. Eine Möglichkeit wäre, dass es im kommenden Jahr ein .NET Framework 5.0[8] mit einem Visual Studio 2015[9] gibt.


URL dieses Artikels:
http://www.heise.de/-2391981

Links in diesem Artikel:
[1] https://www.heise.de/meldung/Microsoft-dritte-Vorschauversion-von-Visual-Studio-14-samt-naechstem-NET-Framework-2295767.html
[2] http://www.IT-Visions.de/lex/7667.aspx
[3] https://connect.microsoft.com/VisualStudio/feedback/details/326900/add-nameof-compile-time-operator-to-c-revisited
[4] https://connect.microsoft.com/VisualStudio/feedback/details/326900/add-nameof-compile-time-operator-to-c-revisited
[5] http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/2427047-add-nameof-operator-in-c
[6] http://connect.microsoft.com/VisualStudio/feedbackdetail/view/326900/add-nameof-compile-time-operator-to-c-revisited
[7] https://roslyn.codeplex.com/discussions/552377
[8] http://www.IT-Visions.de/DOTNET50/lex/6273.aspx
[9] http://www.IT-Visions.de/VisualStudio2015/lex/7897.aspx