2012-06-10 1 views
3

J'ai travaillé sur l'utilisation de mvp pour câbler quelques winforms en C#. Le développement de l'interface utilisateur n'est pas exactement ma suite solide et je cherchais un moyen de mise à l'épreuve du refactor pour implémenter INotifyPropertyChanged sans avoir à recourir à des chaînes pour déclencher des notifications de modification. L'exemple msdn http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx et la plupart des autres que j'ai vus me semblent être la mauvaise façon de le faire, en ce qui concerne le fait que les chaînes doivent être changées au cas où vous refactoriez les propriétés. Toutes les autres options que j'ai vues sur stackoverflow en utilisant des expressions et func, des installations malheureusement pas disponibles dans la solution legacy que je supporte donc je me demandais si quelqu'un a un moyen de répliquer les solutions actuelles qui utilisent des arbres d'expression pour obtenir le nom de la propriété.Ciblage INotifyPropertyChanged C# .Net 3.0

Un exemple des solutions que j'ai vues.

public static string GetPropertyName<T, TReturn>(Expression<Func<T, TReturn>>  expression) 
{ 
MemberExpression body = (MemberExpression)expression.Body; return body.Member.Name; 
} 

Vive

+0

Tests unitaires ..... – BFree

+1

... ** refactor proof ** ... * vraiment ... vraiment ??? * – IAbstract

+0

@Bernard Quels exemples avez-vous qui ne sont pas supportés dans .NET? 3,0? Les nouvelles fonctionnalités auxquelles je peux penser dans 3.5, 4.0 et la version à venir sont des extensions parallèles, des paramètres optionnels et nommés, des dynamiques et des asynchrones, cependant, aucun d'entre eux ne semble pertinent au problème. –

Répondre

6

Pour .NET 3.0, votre meilleur pari pour mettre en œuvre un moyen Refactoriser-preuve de la mise en œuvre est INotifyPropertyChanged par une certaine forme de génération de code. Par exemple, PostSharp (un outil AOP) utilise le tissage IL pour modifier l'assemblage généré dans une étape de post-compilation. Vous pouvez trouver un exemple pertinent pour INotifyPropertyChangedhere. Par ailleurs, the state of the art (C# 5) way de mettre en œuvre INotifyPropertyChanged ne nécessite aucun outil spécial du tout: il y a le [CallerMemberName] attribute.

+0

Salut Ani, merci pour l'exemple, semble bon, je vais essayer et rapporter .. Cheers! – Bernard

+0

vous avez été très utile, j'ai essayé le chemin PostSharp dans le lien que vous avez fourni mais il utilise un héritage qui ne fait pas partie de la distribution gratuite. Salutations à nouveau – Bernard

+0

Fini par le faire de la manière traditionnelle, comme nous ne sommes pas encore sur C# 5 – Bernard