91 votes

Est-ce que .NET a un EventArgs intégré? <T> ?

Je me prépare à créer une classe EventArgs générique pour les arguments d'événement contenant un seul argument:

 public class EventArg<T> : EventArgs
{
    // Property variable
    private readonly T p_EventData;

    // Constructor
    public EventArg(T data)
    {
        p_EventData = data;
    }

    // Property for EventArgs argument
    public T Data
    {
        get { return p_EventData; }
    }
}
 

Avant de faire cela, C # a-t-il la même fonctionnalité intégrée au langage? Je me souviens avoir trouvé quelque chose comme ça quand C # 2.0 est sorti, mais maintenant je ne le trouve pas.

Ou pour le dire autrement, dois-je créer ma propre classe générique EventArgs ou C # en fournit-il une? Merci de votre aide.

71voto

Reed Copsey Points 315315

Pas de. Vous avez probablement été la pensée de l' EventHandler<T>, ce qui vous permet de définir le délégué pour un type spécifique de EventArgs.

Personnellement, je ne pense pas que EventArgs<T> est tout à fait comme un bon ajustement. L'information utilisée comme une "charge utile" dans le cas args devrait être, à mon avis, une classe personnalisée pour rendre son utilisation et de propriétés très clair. À l'aide d'une classe générique va vous empêcher d'être en mesure de mettre des noms significatifs en place. (C'est quoi les "Données"?)

35voto

NSGaga Points 7386

Je dois dire que je ne comprends pas tous les 'puristes' ici. c'est à dire si vous avez déjà un sac de classe définie - qui a tous les détails, propriétés, etc. - pourquoi le hack en créer un supplémentaire inutile classe juste pour être en mesure de suivre l'événement/args mécanisme, le style de signature? chose n'est pas tout ce qui est dans .NET - ou est manquant à partir de "pour que la matière est ce qui est" bon "- MS a été "correction" est elle-même depuis des années... Je dirais juste aller et d'en créer un - comme je l'ai fait parce que je besoin d'elle comme ça et m'a sauvé beaucoup de temps,

10voto

Ulf Åkerstedt Points 802

Il n'existe pas. Au moins, il ne l'est aujourd'hui.

Vous trouverez DataEventArgs<TData> dans certains Microsoft différents assemblages/espaces de noms, par exemple Microsoft.Les pratiques.Prism.Les événements. Cependant, ce sont les espaces de noms que vous ne pourriez pas trouver naturel d'inclure dans votre projet afin que vous pouvez simplement utiliser votre propre mise en œuvre.

1voto

supercat Points 25534

Le problème avec un type générique est que même si DerivedType hérite de BaseType, EventArgs (DerivedType) n'héritera pas de EventArgs (BaseType). L'utilisation de EventArgs (BaseType) empêcherait ainsi l'utilisation ultérieure d'une version dérivée du type.

-4voto

Jimmy Hoffa Points 3651

La raison de ce qui n'existe pas parce que ce serait la fin de l'événement est de vous mettre en oeuvre, et puis quand vous allez à remplir dans le T, vous devez créer une classe avec fortement typé sans ambiguïté propriétés qui agit en tant que données de sac pour votre événement arg, mais à mi-chemin par le biais de la mise en œuvre que vous vous rendez compte il n'y a pas de raison de ne pas seulement faire de cette classe hérite de EventArgs.

Sauf si vous voulez juste une chaîne ou quelque chose de même de base pour votre sac de données, auquel cas il y a probablement EventArgs classes standard .NET qui sont destinés à servir ce simple but que vous obtenez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X