automatisierte InotifyPropertyChanged Implementierung
Im .NET -Objekt ist die
-Schinschnittstelle von entscheidender Bedeutung, um andere Komponentenattribute zu benachrichtigen. Die manuelle Implementierung erfordert für jedes Attribut Vorfälle, die möglicherweise umständlich sein können. In diesem Artikel wird die Methode zur Vereinfachung dieses Prozesses erläutert. INotifyPropertyChanged
PropertyChanged
vereinfachen
Eine gemeinsame Methode besteht darin, eine Hilfsmethode zu erstellen, z. B. , um mit dem Modellcode des Vorfalls umzugehen:
SetField()
Dies vereinfacht das Attribut zu:
<code class="language-csharp">public class Data : INotifyPropertyChanged { // ... protected bool SetField<T>(ref T field, T value, string propertyName) { if (EqualityComparer<T>.Default.Equals(field, value)) return false; field = value; OnPropertyChanged(propertyName); return true; } // 使用SetField()的属性实现 private string name; public string Name { get { return name; } set { SetField(ref name, value, "Name"); } } }</code>
Verwenden Sie C#Verbesserung, um
<code class="language-csharp">private string name; public string Name { get { return name; } set { SetField(ref name, value); } }</code>
c# 5 eingeführte Attribute, sodass automatisch abschließend Attributname: ermöglicht werden:
CallerMemberName
Mit dieser Verbesserungsfunktion können Sie die Attributimplementierung weiter vereinfachen:
<code class="language-csharp">protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null) { // ... }</code>
Die höhere Version von C#bietet mehr Verbesserungsfunktionen, um die Implementierung zu vereinfachen:
<code class="language-csharp">set { SetField(ref name, value); }</code>
C# 7.0:
<code class="language-csharp">protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }</code>
C# 8.0 und kann für Luftzitate verwendet werden:
<code class="language-csharp">protected void OnPropertyChanged(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null) { // ... } private string name; public string Name { get => name; set => SetField(ref name, value); }</code>
erheblich vereinfacht, so dass es in der modernen Version von C#keine mühsame Aufgabe mehr ist.
Das obige ist der detaillierte Inhalt vonWie kann ich die Implementierung von InotifyPropertyChanged in C#vereinfachen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!