nameof ist eine richtig hilfreiche Sache um all diese magischen Strings aus dem Sourcecode raus zu bekommen. Gerade zu WPF-Zeiten waren entsprechende Workarounds besonders in Zusammenhang mit INotifyPropertyChanged etc. gefragt. Hier ein solches Beispiel:

public class Person : INotifyPropertyChanged
{
    private string firstName;

    public string FirstName
    {
        get { return firstName; }
        set
        {
            firstName = value;
            NotifyPropertyChanged("FirstName");
        }
    }

    protected void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this,
                new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChangedEventHandler PropertyChanged;
}

Der Nachteil besteht nun darin, dass bei einer Änderung der Property auch der String entsprechend geändert werden muss, damit die Funktionalität erhalten bleibt. Dies ist zwar in diesem Beispiel einfach zu finden, geht aber schon einmal unter.

NotifyPropertyChanged("FirstName"); kann nun wie folgt verbessert werden:

NotifyPropertyChanged(nameof(FirstName);

Dadurch werden Umbenennungen auch hierfür durchgeführt.

Besonders interessant ist nameof auch bei der Verwendung der ArgumentNullException bzw. der ArgumentOutOfRangeException.

Zu beachten ist, dass nameof nur den eigentlichen Namen der Klasse, Methode oder Eigenschaft zurückliefert. Namespaces und übergeordnete Typnamen bleiben außen vor.

Viel Spaß!

Viele weitere Neuerungen finden sich in der C# 6 Serie.

Über den Autor

Norbert Eder

Ich bin ein leidenschaftlicher Softwareentwickler und Fotograf. Mein Wissen und meine Gedanken teile ich nicht nur hier im Blog, sondern auch in Fachartikeln und Büchern.

2 Kommentare