Mit dem Aufkommen von .NET 4.5.3 haben WPF-Entwickler jetzt drei (oder mehr) Möglichkeiten, die INotifyPropertyChanged
Interface von Eigenschaftsänderungen zu benachrichtigen. Im Grunde ist meine Frage Welche der beiden ab .NET 4.5 eingeführten Methoden ist die effizientere Möglichkeit, Änderungen an Eigenschaften zu melden, und ob bei der Verwendung in WPF beides von Vorteil ist?Gibt es einen Vorteil der Verwendung des Namens des Operators anstelle des CallerMemberNameAttribute, um Änderungen der Eigenschaften in .NET 4.5.3 zu melden?
Hintergrund
Für jene nicht so vertraut mit diesem Thema, hier sind die drei wichtigsten Methoden. Die erste ist die ursprüngliche, fehleranfälliger Verfahren des einfachen String übergeben:
public string TestValue
{
get { return testValue; }
set { testValue = value; NotifyPropertyChanged("TestValue"); }
}
protected virtual void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Die zweite Methode .NET 4,5 wurde eingeführt in; die CallerMemberNameAttribute
:
public string TestValue
{
get { return testValue; }
set { testValue = value; NotifyPropertyChanged(); }
}
protected virtual void NotifyPropertyChanged([CallerMemberName]string propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Die dritte und jüngste Methode war (oder wird bald) eingeführt in C# 6.0 als Teil .NET 4.5.3; die nameof
Operator:
public string TestValue
{
get { return testValue; }
set { testValue = value; NotifyPropertyChanged(nameof(TestValue)); }
}
protected virtual void NotifyPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
Meine Vermutung wäre, dass die ursprünglichen, fehleranfällige Methode der einfach einen String übergeben die effizienteste wäre, da ich nur, dass die beiden anderen Methoden eine gewisse Form der Reflexion verwenden vorstellen kann. Ich bin jedoch sehr daran interessiert, herauszufinden, welche der beiden anderen Methoden effizienter ist und ob tatsächlich ein Unterschied zwischen der Verwendung des CallerMemberNameAttribute
-Attributs und des nameof
-Operators in einem WPF-Kontext besteht.
„Die dritte und letzte Methode wurde (oder wird in Kürze) eingeführt in C# 6.0 als Teil von .NET 4.5.3; der Name des Operators "- genau genommen ist' nameof' ein [Sprachfeature] (https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23 -6) und nicht ein Teil des Frameworks. –