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 à:
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"); } } }
<用> Utilisez C # Amélioration pour améliorer
private string name; public string Name { get { return name; } set { SetField(ref name, value); } }
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
protected bool SetField<T>(ref T field, T value, [CallerMemberName] string propertyName = null) { // ... }
<> C # 6.0:
set { SetField(ref name, value); }
<> C # 7.0:
protected void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); }
Ces améliorations ont considérablement simplifié la réalisation de
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); }
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!