С появлением .NET 4.5.3 разработчики WPF теперь имеют три (или более) способа уведомления об изменениях свойств INotifyPropertyChanged
Interface. В основном, мой вопрос: . Какой из двух методов, введенных с .NET 4.5, является более эффективным способом уведомления об изменениях свойств и имеет ли какой-либо эффект при использовании в WPF?Есть ли какая-либо польза от использования оператора nameof вместо CallerMemberNameAttribute для уведомления изменений свойств в .NET 4.5.3?
фон
Для тех, кто не так хорошо знакомы с этой темой, вот основные три метода. Первым из них является оригинальным, более подвержен ошибкам метод просто передавая строку:
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));
}
}
Второй метод был введен в .NET 4.5; 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));
}
}
Третий и последний метод был (или скоро будет), введенный в С # 6.0 как часть .NET 4.5.3; 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));
}
Мое предположение было бы, что оригинал, более подвержен ошибкам метод просто передавая строку будет наиболее эффективным, так как я могу только представить себе, что два других способа использовать некоторые формы отражения. Тем не менее, я очень хочу узнать, какой из двух других методов более эффективен, и действительно ли будет какая-либо разница между использованием атрибута CallerMemberNameAttribute
и оператором nameof
в контексте WPF.
«Третий и последний метод (или скоро будет) введен в C# 6.0, как часть .NET 4.5.3, имя оператора »- строго говоря,« имя »- это [функция языка] (https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23 -6), а не часть структуры. –