ホームページ >バックエンド開発 >C++ >C#でinotifyPropertyChangedの実装を簡素化するにはどうすればよいですか?

C#でinotifyPropertyChangedの実装を簡素化するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-02-02 09:26:09926ブラウズ

How Can I Simplify INotifyPropertyChanged Implementation in C#?

自動化されたinotifypropertychanged実装

.NETオブジェクトでは、他のコンポーネント属性を通知するためにインターフェイスが重要です。手動で実装するには、各属性に対して

インシデントが必要であり、面倒な場合があります。この記事では、このプロセスを簡素化する方法について説明します。

INotifyPropertyChanged単純化PropertyChanged

一般的な方法は、インシデントのモデルコードに対処するためになどの補助方法を作成することです。 これにより、属性が次の属性を簡素化します

c#改善を使用して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>
c#5は

属性を導入し、自動推測属性名を許可します:

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

この拡張機能を使用すると、属性の実装をさらに簡素化できます。 C#の上位バージョンは、実装を簡素化するためのより多くの拡張機能を提供します。

c#6.0:

CallerMemberName

<code class="language-csharp">protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null) {
    // ...
}</code>
c#7.0:

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

c#8.0と空気の見積もりに使用できます:

これらの拡張機能は、

の実現を大幅に簡素化したため、C#の最新バージョンではもはや退屈なタスクではありません。
<code class="language-csharp">protected void OnPropertyChanged([CallerMemberName] string propertyName = null) {
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}</code>

以上がC#でinotifyPropertyChangedの実装を簡素化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。