自動化された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 サイトの他の関連記事を参照してください。