Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya dapat memudahkan pelaksanaan InotifyPropertyChanged di C#?

Bagaimanakah saya dapat memudahkan pelaksanaan InotifyPropertyChanged di C#?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-02-02 09:26:09928semak imbas

How Can I Simplify INotifyPropertyChanged Implementation in C#?

Pelaksanaan InoTifyPropertyChanged automatik

Dalam objek .NET, antara muka adalah penting untuk memberitahu atribut komponen lain. Melaksanakannya secara manual memerlukan insiden

untuk setiap atribut, yang mungkin rumit. Artikel ini membincangkan kaedah memudahkan proses ini.

INotifyPropertyChanged memudahkan PropertyChanged

Kaedah biasa adalah untuk membuat kaedah tambahan, seperti untuk menangani kod model kejadian:

Ini memudahkan atribut kepada: SetField()

<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>
Gunakan C#Penambahbaikan untuk meningkatkan

<code class="language-csharp">private string name;
public string Name {
    get { return name; }
    set { SetField(ref name, value); }
}</code>
C# 5 diperkenalkan

atribut, yang membolehkan automatik menyimpulkan nama atribut:

Dengan fungsi peningkatan ini, anda dapat memudahkan pelaksanaan atribut lagi:

CallerMemberName

versi C#yang lebih tinggi menyediakan lebih banyak fungsi peningkatan untuk memudahkan pelaksanaan:
<code class="language-csharp">protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null) {
    // ...
}</code>

c# 6.0:

<code class="language-csharp">set { SetField(ref name, value); }</code>

c# 7.0:

c# 8.0 dan boleh digunakan untuk petikan udara:

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

Penambahbaikan ini telah mempermudahkan kesedaran , supaya ia tidak lagi menjadi tugas yang membosankan dalam versi moden C#.

Atas ialah kandungan terperinci Bagaimanakah saya dapat memudahkan pelaksanaan InotifyPropertyChanged di C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn