Как можно увидеть код C # после компиляции / оптимизации? - PullRequest
11 голосов
/ 16 декабря 2010

Я читал о ключевом слове yield, когда наткнулся на пример главы из C # в глубине : http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx.

Первый блок кода использует ключевое слово yield для создания простого итератора. Но второй блок кода показывает этот код после того, как с ним справился компилятор. Среди прочего, он превратил оператор yield в конечный автомат.

Несколько других примеров изменения кода компилятором можно увидеть на странице.

Мой вопрос: Удалось ли автору получить доступ к коду после компиляции или он сделал вывод, как он будет выглядеть?

Ответы [ 6 ]

14 голосов
/ 16 декабря 2010

Вы можете посмотреть с помощью Reflector, это, вероятно, ваш лучший выбор:

http://reflector.red -gate.com

9 голосов
/ 16 декабря 2010

Сам автор упомянул:

Очевидно, что компилятор на самом деле не создает C #, но я использовал Reflector для декомпиляции кода как C #.

втот же абзац, под названием Обзор высокого уровня: что за образец?

4 голосов
/ 16 декабря 2010

Проверьте ildasm , чтобы взглянуть на скомпилированный IL.

(На самом деле, это очень весело, как только вы попадете в глаза)

4 голосов
/ 16 декабря 2010

Возможно оба. Скомпилировать сборки с помощью Reflector довольно просто. И спецификация языка C #, которая определяет, как различные синтаксически-сахаристые вещи компилируются, является публичным документом. Автор мог бы использовать либо подход, либо их смесь.

2 голосов
/ 16 декабря 2010

.NET CLR на самом деле имеет форму ассемблера MSIL вместе с ассемблером и распространителем.Так что да, вы можете скомпилировать код, а затем посмотреть точные скомпилированные инструкции CLR.

http://www.4guysfromrolla.com/articles/080404-1.aspx

1 голос
/ 15 июля 2015

dotPeek от JetBrains

https://www.jetbrains.com/decompiler/

Это бесплатно и удобно в использовании:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...