Con l'avvento di .NET 4.5.3, gli sviluppatori WPF ora hanno tre (o più) modi per notificare il INotifyPropertyChanged
Interface di modifiche alle proprietà. Fondamentalmente, la mia domanda è Quale dei due metodi introdotti da.NET 4.5 in poi è il modo più efficace per notificare le modifiche alle proprietà e se in entrambi i casi ha qualche vantaggio quando viene utilizzato in WPF?C'è qualche vantaggio nell'usare l'operatore nameof invece del CallerMemberNameAttribute per notificare le modifiche alle proprietà in .NET 4.5.3?
Sfondo
Per chi non ha molta familiarità con questo argomento, ecco i principali tre metodi. La prima è la più errore metodo inclini originali semplicemente passando una stringa:
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));
}
}
Il secondo metodo è stato introdotto in .NET 4.5; il 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));
}
}
Il terzo e più recente metodo è stato (o sarà presto) ha introdotto in C# 6.0 come parte di .NET 4.5.3; il 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));
}
La mia ipotesi è che il più errore di metodo inclini originale semplicemente passando una stringa sarebbe la più efficace, come posso solo immaginare che gli altri due metodi utilizzano una qualche forma di riflessione. Tuttavia, sono davvero curioso di scoprire quale degli altri due metodi sia più efficiente e se ci sia effettivamente qualche differenza tra l'uso dell'attributo CallerMemberNameAttribute
e l'operatore nameof
in un contesto WPF.
"Il terzo e più recente metodo è stato (o sarà presto) ha introdotto in C# 6.0 come parte di .NET 4.5.3, il nome di Operator "- strettamente parlando" nameof "è una [lingua] (https://github.com/dotnet/roslyn/wiki/New-Language-Features-in-C%23 -6) e non una parte del quadro. –