.NET 4.5.3'ün ortaya çıkmasıyla, WPF geliştiricilerinin artık INotifyPropertyChanged
Interface özellik değişikliklerini bildiren üç (veya daha fazla) yolu vardır. Temel olarak, benim soru olan .NET 4.5'ten başlayarak sunulan iki yöntemden hangisi, WPF'de kullanıldığında herhangi bir fayda olup olmadığını ve özellik değişikliklerini bildirmenin daha etkili bir yoludur? Bu konuda çok aşina olmayanlar için.NET 4.5.3'te özellik değişikliklerini bildirmek için CallerMemberNameAttribute yerine işlecinin adını kullanmanın herhangi bir yararı var mı?
Arkaplan
, burada ana üç yöntemlerdir. İlk basitçe bir dize geçirmeden orijinal, daha fazla hata eğilimli bir yöntemdir: İkinci yöntem .NET 4.5 tanıtıldı
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));
}
}
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));
}
}
üçüncü ve en son yöntem olan (veya yakında olacak) .NET 4.5.3 parçası olarak C# 6.0 tanıtıldı; 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));
}
Kendi varsayım ben sadece diğer iki yöntem yansıma türü kullanıyor edebileceğiniz gibi sadece bir dize geçirmeden orijinal, daha fazla hata eğilimli yöntem, en verimli olacağını olurdu. Ancak, diğer iki yöntemin hangisinin daha verimli olduğunu ve WPF bağlamında CallerMemberNameAttribute
özniteliği ile nameof
işlecini kullanma arasında herhangi bir fark olup olmayacağını bulmaya gerçekten çok hevesliyim.
"üçüncü ve son yöntem olan (veya yakında olacak) olarak C# 6.0 tanıtıldı .NET 4.5.3'ün bir parçası, Operatörün adı "- kesinlikle" nameofuz "bir dil özelliğidir (https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23 -6) ve çerçevenin bir parçası değil. –