Maison >développement back-end >C++ >Comment puis-je simplifier la mise en œuvre inotifyPropertyChanged en C #?

Comment puis-je simplifier la mise en œuvre inotifyPropertyChanged en C #?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-02-02 09:26:09928parcourir

How Can I Simplify INotifyPropertyChanged Implementation in C#?

Implémentation automatisée inotifyPropertyChanged

Dans l'objet .NET, l'interface

est essentielle pour informer d'autres attributs de composants. L'implémenter manuellement lui nécessite des incidents

pour chaque attribut, qui peuvent être lourds. Cet article traite de la méthode de simplification de ce processus. INotifyPropertyChanged PropertyChanged Simplifier

Une méthode commune consiste à créer une méthode auxiliaire, telle que pour gérer le code du modèle de l'incident:

SetField() Cela simplifie l'attribut à:

<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>

Utilisez C # Amélioration pour améliorer

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

C # 5 Introduit Attributs, permettant le nom d'attribut inférieur automatique:

Avec cette fonction d'amélioration, vous pouvez simplifier davantage l'implémentation de l'attribut: CallerMemberName

<code class="language-csharp">protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null) {
    // ...
}</code>
La version supérieure de C # fournit plus de fonctions d'amélioration pour simplifier l'implémentation:

C # 6.0:
<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 et peut être utilisé pour les citations d'air:

Ces améliorations ont considérablement simplifié la réalisation de
<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>
, de sorte que ce n'est plus une tâche fastidieuse dans la version moderne de C #.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn