.NET 2.0 a ajouté le type Gardant cela à l'esprit, pourquoi ce type de délégué n'apparaît presque nulle part dans la framework .NET? Je sais que la plupart des API essentielles ont été développées avant que des génériques aient été introduites, mais même dans de nouvelles parties du cadre telles que WPF, ils ont opté pour définir explicitement des types de délégués; par exemple. Y a-t-il quelque chose de malheureusement mal avec le délégué générique du gestionnaire d'événements? Je l'utilise souvent et je crains que mon code apparaisse très en place par rapport aux classes intégrées. P> EventHandler
eventargs code> et son délégué correspondant (par exemple,
myEventargs code> et
myevenventharler code>), vous n'avez besoin que d'écrire la classe args. p>
RouteteDeventHandler Code> au lieu de
EventHandler
4 Réponses :
Je ne pense pas qu'il y ait rien de mal avec ça. Il est utilisé em> utilisé dans certains endroits de la framework ... dans C'est un peu maladroit de voir en code qu'un nom de type spécifique tel que géocoordinatewatcher.Position code>
événement, tout comme exemple aléatoire. P>
RouteteDeventHandler CODE> - et comme vous allez utiliser
RoudeDeventHandler code> A em> lot em > Dans WPF / Silverlight, c'est peut-être raison pour laquelle MM est décidé de lui donner son propre type. P>
juste un accident de l'histoire. Si nous avions des génériques dans .NET 1 la plupart des autres délégués n'existeraient pas. P>
Cela pourrait également être que lorsque vous écrivez le code de niveau-cadre, vous avez tendance à être plus explicite. Lorsque vous écrivez la boîte à outils et le code de niveau d'application non plus. P>
Ce qui suit est juste mon adpinion personnelle, mais cela semble raisonnable (ovleusement) raisonnable pour moi;
Si nous examinons de près la façon dont vous travaillez en utilisant .NET et V Studio, il apparaît que la notation de type générique semble fuir une "beauté". tandis que le code ci-dessus est Pretty simple, droit vers l'avant et bien soutenu par Intelli Sens, l'événement EventHandler "Look and Sensation" ne semble pas si clair. Le support Intelli par défaut suggérera uniquement l'événementHandler, pas son générique. En outre, la notation a juste l'air terrible: p>
Lors de la vue d'ensemble du code que vous allez lire sur "EventHandler" à chaque fois et votre esprit pourrait connecter ces délégués, Beacuse vous êtes utilisé pour identifier la relation de types par leurs noms.
De l'autre côté, il pourrait également y avoir une explication moins isoterique et plus technique / logique:
Tout d'abord, vous obtenez toujours un objet de l'expéditeur dans la méthode de manutention. Bien que cela semble utile au premier coup d'œil - c'est l'orge jamais utilisé.
De plus, vos arguments doivent tirer des éventuels qui pourraient être ennuyeux ou parfois même immensables en raison de l'utilisation des composants existants.
Autre que les génériques typiques (E.G. IList / List), vous fuyez la possibilité d'utiliser un type plus abstrait (comme une interface) ou simplement un simple type (comme un double).
Enfin, ces règles de notation / suggestions introduites par Microsoft - pour votre exemple de l'événement routé La règle pourrait dire que son type est "marqué" comme étiquette acheminé en ayant le nom de "acheminé". Bien que la nommée pour l'événement indique lui-même que le nom commence par un "prévisualisation".
Comme je l'ai mentionné: c'est juste mon opinion alors ne me blâmez pas;) P> P>
Le paramètre expéditeur code> a définitivement ses utilisations. Il vient dans lui-même chaque fois que vous avez le même gestionnaire lié aux événements sur plusieurs objets. Bien que ce ne soit pas utile tout le temps, les personnes qui utilisent votre code s'attendent à ce que cela soit disponible. En ce qui concerne l'utilisation de descendants de
eventargs code>, je pense personnellement que la promotion de l'idée de mettre une porte entre votre code et l'utilisateur - en vous assurant de ne jamais donner accidentellement un objet mutable que vous ne les voulez pas. Pour modifier, etc. Vos remarques concernant la dénomination sont définitivement valables, cependant. Me fait souhaiter que c # avait
Typedef code> ...
Je soupçonne que l'introduction de
EventHandler code> était juste un mauvais chronométrage. Au moment où il a été introduit, l'autre schéma (explicitement nommé des délégués) a été fermement établie et à la mise au point d'un changement de type générique de délégué aurait pu être considéré comme faisant un désordre encore plus grand (en conduisant à des programmeurs confus qui demandent, "Quoi Était-ce que ce délégué a été réparé à nouveau?
FOOEVENTHANDLER CODE> ou
EventHandler CODE>? " I>) - Ce qui me rend curieux si le changement vers
iEvent code> (introduit par F # et le cadre RX) fonctionnera.
WPF a été lancé en juillet 2003, bien avant que les génériques n'étaient disponibles. La même chose pour les formes Windows bien sûr.