Utilisation d’atsortingbuts… INotifyPropertyChanged

C’est quelque chose que je pensais savoir pendant que j’apprenais sur Atsortingbutes et que j’utilisais trop INotifyPropertyChanged, c’est juste et idéal et j’aimerais entendre des opinions à ce sujet. côté consommateur)

Etant donné qu’INotifyPropertyChanged est utilisé avec le même modèle la plupart du temps, comme pour appeler la méthode qui déclenche l’événement avec le nom de la propriété, pourrait-il être conçu en tant qu’atsortingbut et utiliser Propriétés automatiques? Pour que le compilateur sache qu’il doit append l’appel à l’événement PropertyChanged? Donc, si nous avons la classe …

public class DemoCustomer : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; private void NotifyPropertyChanged(Ssortingng info) { if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs(info)); } } private ssortingng companyNameValue = Ssortingng.Empty; ... } 

Au lieu de déclarer la propriété

 public ssortingng CompanyName { get { return this.companyNameValue; } set { if (value != this.companyNameValue) { this.companyNameValue = value; NotifyPropertyChanged("CompanyName"); } } } 

nous pourrions faire quelque chose comme ceci si nous pouvons indiquer au compilateur par cet atsortingbut qu’il doit générer un appel à PropertyChanged avec le nom de la propriété si la nouvelle valeur est différente de la valeur précédente.

 [NotifyPropertyChanged] public ssortingng CompanyName { get;set; } 

Nous pourrions toujours continuer à coder à l’ancienne pour certains comportements personnalisés sans utiliser l’atsortingbut.

Vous pouvez le faire avec PostSharp , mais je ne pense pas que ce sera dans le compilateur principal pour le moment.

Au cas où quelqu’un passerait par ce fil et utiliserait C # 5 (VS 2012+, .NET 4.5+). Ce cas sera fait “plus facilement” maintenant avec CallerMemberNameAtsortingbute . Cet atsortingbut est appliqué à un paramètre de chaîne et oblige le compilateur à transmettre le nom de la méthode / propriété appelante lorsque la valeur par défaut us us (c.-à-d. Quand et l’argument n’est pas passé). Rendre la mise en œuvre de INotifyPropertyChanged moins fastidieuse. Par exemple:

 public class MyClass { private ssortingng myProperty; public ssortingng MyProperty { get { return myProperty; } set { myProperty = value; OnPropertyChanged(); } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged([CallerMemberName] ssortingng propertyName = null) { var handler = PropertyChanged; if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); } } 

Donc, vous avez juste besoin de OnPropertyChanged() dans chaque configurateur pour envoyer l’événement et n’avez pas à gérer une chaîne codée en dur pour le nom de la propriété.

Ce style de pensée s’appelle Programmation Orientée Aspect (ou AOP). Vous pouvez obtenir le résultat final en ajoutant une action de post-génération à l’aide de Cecil de Mono pour passer en revue les propriétés avec cet atsortingbut, modifier le comportement de la propriété et extraire l’assembly nouvellement compilé avec le comportement approprié. Vous pouvez consulter le Dimecast de Jason Bock sur ” Tirer parti de Cecil pour injecter du code dans vos assemblys “.