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.
das gleiche für VB.NET und mit dem Hinweis auf Callermembername
Danke für den VB.NET-Hinweis :)