2010-12-15 161 views
10

Je lisais sur le mot-clé yield lorsque je suis tombé sur un exemple de chapitre de C# en profondeur: http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx.Comment est-il possible de voir le code C# après compilation/optimisation?

Le premier bloc de code utilise le mot clé yield pour créer un itérateur simple. Mais, le deuxième bloc de code montre ce code après que le compilateur a fait son chemin avec lui. Entre autres choses, il a explosé l'instruction yield dans une machine d'état.

Plusieurs autres exemples de code en cours de modification par le compilateur sont évidents sur la page.

Ma question est: L'auteur a-t-il réellement pu accéder au code après compilation, ou at-il déduit à quoi il ressemblerait?

+0

réflecteur est votre ami –

+1

La vraie réponse à cette question devrait être "Trop facile!" –

+0

Reflector est vraiment votre ami. –

Répondre

13

Vous pouvez jeter un oeil à l'aide du réflecteur, qui est probablement votre meilleur pari:

http://reflector.red-gate.com

+0

Juste téléchargé, merci pour le conseil! Est-ce que la version non-Pro s'intègrera encore avec VS? –

4

Probablement les deux. Il est assez facile de désosser les assemblys compilés en utilisant Reflector. Et la spécification de langage C#, qui définit la façon dont les diverses choses syntaxiques-sucrées sont compilées, est un document public. L'auteur aurait pu utiliser l'une ou l'autre approche, ou un mélange des deux.

4

Découvrez ildasm pour jeter un coup d'œil à l'IL compilé.

(Vraiment, il est très amusant une fois que vous obtenez votre œil)

8

L'auteur lui-même mentionné:

Il est évident que le compilateur ne produit pas réellement C#, mais j'ai utilisé réflecteur décompiler le code en C#.

dans le même paragraphe, intitulé Vue d'ensemble de haut niveau: quel est le modèle?

+0

Wow. C'est pourquoi les articles d'écrémage ne vous mèneront pas très loin :). Merci! –

+4

@SimpleCoder - vous devez être capable de ** voir pointu ** si vous voulez ** C# **, mon ami =). – BeemerGuy