quel est le but/le point/la raison d'permettant d'utiliser le langage C# élément sans exécution de la représentation dans le CLR, comme la méthode des groupes à l'intérieur de l'tels "l'exécution" de l'opérateur, comme l'est?
La langue des design notes d'archives ne font aucune mention des raisons pour lesquelles cette décision a été prise, de sorte que toute deviner la réponse sera une conjecture. Ils ne mentionner que si le résultat de l' "est" peut-être statiquement déterminé à toujours être vrai ou faux, il est déterminé et de produire un avertissement. Il semble plausible que ce pourrait être tout simplement une erreur.
La raison la plus courante pour le tournage de ce qui pourrait à juste titre être une erreur dans un avertissement (ou tout simplement le permettant), c'est parce que diminue le fardeau qui pèse sur les producteurs de programmes de générer automatiquement du code. Cependant, je ne vois pas vraiment convaincante scénario ici.
Mise à JOUR:
Je viens de vérifier le C# 1.0 de la spécification. Il n'a pas cette langue en elle. Il ne dit rien sur les valeurs null ou de la méthode de groupe arguments. Et bien sûr, il ne dit rien sur la méthode du groupe de conversions, car en C# 1.0 il n'y avait pas de méthode implicite groupe de conversions; vous devez explicitement appeler les "nouveaux D(M)" si vous vouliez convertir méthode M d'un délégué de type D.
Ce dernier point est de la justification de la "M est D" renvoyant false plutôt que de vrai; on ne pouvait légalement pas le dire "D D = M;" alors, pourquoi devrait "M est D" être vrai?
Bien sûr, en C# 2.0, moins de sens, puisque vous pouvez dire "D D = M;" en C# 2.0.
J'ai également demandé à l'une des personnes présentes lors de l' "est" l'opérateur a été conçu et il n'avait aucun souvenir de ne jamais trancher cette question d'une manière ou l'autre. Sa méfiance était que la conception originale de "est" l'opérateur a été de ne pas donner les erreurs, seulement des avertissements, et que tout le texte de la spécification de savoir quoi faire avec la méthode des groupes et des valeurs null et autres joyeusetés a été ajouté a posteriori, pour le C# 2.0 version de la spécification, et basé sur ce que le compilateur fait.
En bref, il semble que ce était une conception de trou de C# 1.0 qui a été occultées lors de la spécification a été mis à jour pour C# 2.0. Il ne ressemble pas à ce comportement spécifique a été voulue et délibérément mis en œuvre.
Cette théorie est renforcée par le fait que les méthodes anonymes ne produire une erreur lorsqu'il est utilisé comme un argument pour "est" en C# 2.0. Il ne serait pas d'une modification de rupture pour le faire, mais il serait être une rupture de changement à faire "M est D" tout à coup commencer à retourner true ou être une erreur.
MISE À JOUR:
Alors qu'il enquête sur ce que j'ai appris quelque chose d'intéressant. (Me.) Lorsque la fonction a été conçu à l'origine, le projet était de permettre soit le nom d'un type ou d'un Type d'objet que la droite argument "est". Cette idée a été abandonnée bien avant C# 1.0 fourni si.