Heim > Backend-Entwicklung > C++ > Wie kann ich die Implementierung von InotifyPropertyChanged in C#vereinfachen?

Wie kann ich die Implementierung von InotifyPropertyChanged in C#vereinfachen?

Mary-Kate Olsen
Freigeben: 2025-02-02 09:26:09
Original
924 Leute haben es durchsucht

How Can I Simplify INotifyPropertyChanged Implementation in C#?

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>
Nach dem Login kopieren

Verwenden Sie C#Verbesserung, um

<code class="language-csharp">private string name;
public string Name {
    get { return name; }
    set { SetField(ref name, value); }
}</code>
Nach dem Login kopieren
zu verbessern

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>
Nach dem Login kopieren

Die höhere Version von C#bietet mehr Verbesserungsfunktionen, um die Implementierung zu vereinfachen:

<code class="language-csharp">set { SetField(ref name, value); }</code>
Nach dem Login kopieren
C# 6.0:

C# 7.0:

<code class="language-csharp">protected void OnPropertyChanged([CallerMemberName] string propertyName = null) {
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}</code>
Nach dem Login kopieren

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>
Nach dem Login kopieren
Diese Verbesserungen haben die Verwirklichung von

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage