8
votes

Quel est le moyen "correct" d'initialiser un délégué C #?

C # Les délégués ont toujours été difficiles pour moi de saisir et j'étais donc très heureux de trébucher sur Article de LogicChild sur le site Web du projet Site Web intitulé" C # Délégués: étape par étape ". Il a un moyen très succinct d'expliquer C # délégués et je peux vous le recommander. Cependant, en essayant les exemples, je vois que c'est deux façons d'initialiser un délégué, principalement: xxx

et xxx

où le La classe de mathématiques est définie comme xxx

alors quelle est la méthode "correcte" et pourquoi?


0 commentaires

5 Réponses :


9
votes

Ils sont tous deux corrects, mais Conversion de groupe de méthodes , qui est La deuxième option a été ajoutée en 2.0 (IIRC). C'est à dire. Si vous utilisez une ancienne version du compilateur, vous devez utiliser la première option. Sinon, le typing supplémentaire est vraiment redondant.


0 commentaires

3
votes

J'utilise toujours la première méthode pour le souci de lisibilité. La deuxième option indique que Math.sum est une propriété et renvoie un résultat qui est un calculateur de calcul. Personnellement, je pense que c'est déroutant.


5 commentaires

Whoa. Beaucoup de crimes sont engagés «pour des raisons de lisibilité», et éminente parmi eux écrit un code long, convoluté au lieu d'un code claire et concis. C'est le contraire de la lisibilité.


amusant j'utilise la seconde pour la lisibilité. Va juste montrer que la lisibilité est subjective


@Konrad, longtemps ne correspond pas automatiquement compliqué. Et court ne correspond pas automatiquement lisible. Regex se vient à l'esprit ... Le fait est que le fait "plus long" suit de manière plus étroitement la manière dont tout le reste fonctionne dans C #. La manière plus courte est potentiellement déroutante. J'appellerais à peine Calculhandler Sumhandler1 = Nouveau Calculhandler (Math.sum); un crime.


Pas automatiquement, vrai. Mais votre code ajoute une redondance inutile et je trouve cela difficile à justifier. "Par souci de lisibilité" n'est pas une justification, c'est une revendication injustifiée.


@Konrad, je justifie pourquoi je pense que cela le rend plus lisible (suivant les modèles existants). Préférence personnelle Je suppose. [Respectueusement recule du fil de commentaire de peur de commencer la guerre de flamme]



0
votes

Les deux voiles sont correctes, la version courte n'est que le service C # Compiler. La première façon est plus verbeuse et montre exactement ce qui se passe. Les deux versions produisent le même code IL, qui est en fait proche de la première version.


0 commentaires

1
votes

Les deux sont corrects.

Le second est un raccourci fourni par le compilateur, les deux créent réellement le code du premier.

Le premier montre plus clairement ce qui se passe réellement, tandis que le second est moins de code, il est donc plus facile de lire (une fois que vous comprenez ce qui se passe vraiment).


0 commentaires

1
votes

Personnaly, je préfère la deuxième option (conversion de groupe de méthodes). D'un point de vue fonctionnel, je me soucie du type de délégué, car cela ne me donnera aucune astuce à ce que la méthode affectée au délégué fait lorsqu'elle est invoquée. Le nom de la méthode (au moins doit-il) cependant donner une bonne idée de ce qui va se passer lorsque le délégué est invoqué et dans la deuxième option, je n'ai pas à rechercher le nom de la méthode.

comme une note latérale vs vous donnera la première version si vous utilisez une autocomplete avec l'enregistrement du gestionnaire d'événements. Resharber utilisera la seconde partie et marque la partie du code dans la première version comme redondante.


0 commentaires