2010-06-19 7 views
6

J'ai un certain nombre de classes EventArgs avec un seul champ et une propriété appropriée pour le lire:Généré EventArgs intégré pour ne contenir qu'une seule propriété?

public class SomeEventArgs : EventArgs 
{ 
    private readonly Foo f; 
    public SomeEventArgs(Foo f) 
    { 
     this.f = f; 
    } 
    public Foo Foo 
    { 
     get { return this.f; } 
    }  
} 

Y at-il intégré, classe générique pour mettre en œuvre un tel comportement ou je dois rouler ma propre?

public class GenericEventArgs<T> : EventArgs 
{ 
    private readonly T value; 
    public GenericEventArgs(T v) 
    { 
     this.value = v; 
    } 
    public T Value 
    { 
     get { return this.value; } 
    }  
} 

P.S. J'ai écrit un suggestion on Microsoft Connect

+1

Il existe des implémentations de 'DataEventArgs ' dans certains assemblys/espaces de noms Microsoft. Voir aussi: http://stackoverflow.com/questions/3312134/does-net-have-a-built-in-eventargst/15896769#15896769 –

Répondre

1

Je ne pense pas qu'il y en ait.
On dirait que vous n'êtes pas le seul à se poser cette question.
Jetez un oeil here

3

Si est un, il est certainement pas bien médiatisé! (Ce n'est pas quelque chose que vous voulez signifiait à utiliser pour des choses générales, comme Func<T>.) Je pensais à la même chose moi-même avant maintenant. Ce n'est pas une exigence rare, IMO. Un inconvénient de ceci est qu'il n'a pas de nom significatif pour la propriété, bien sûr - c'est comme EventArgs équivalent de Tuple. Mais si vous avez plusieurs cas d'utilisation différents pour cela et que sera sera réellement évident quelle est la signification, allez-y :)

+0

@ Le lien d'Itay suit un nom intéressant: juste 'EventArgs '. C'est très intéressant pourquoi FCL ne contient pas encore une telle classe très utile! – abatishchev

2

Sur cette page en bas, vous pouvez voir toutes les classes sont héritées de la classe EventArgs: http://msdn.microsoft.com/en-us/library/system.eventargs.aspx

le plus approprié est ReturnEventArgs http://msdn.microsoft.com/en-us/library/ms615572.aspx mais cette classe est situé dans PresentationFramework.dll, qui est seulement référencé par les projets WPF.

Je recommande donc de créer votre propre.

+0

Parfait, merci! Il se trouve que je code dans WPF :-) – Heliac