Ответ 1
Вы можете посмотреть с помощью Reflector, что, вероятно, лучше всего:
Я читал о ключе yield
, когда я наткнулся на образец главы из С# в глубину: http://csharpindepth.com/Articles/Chapter6/IteratorBlockImplementation.aspx.
В первом блоке кода используется ключевое слово yield
для создания простого итератора. Но второй блок кода показывает этот код после того, как у компилятора был свой путь. Помимо прочего, он взорвал оператор yield
в конечный автомат.
Несколько других примеров кода, которые модифицируются компилятором, очевидны на странице.
Мой вопрос: Действительно ли автор мог получить доступ к коду после компиляции или сделал вывод о том, как он будет выглядеть?
Вы можете посмотреть с помощью Reflector, что, вероятно, лучше всего:
Сам автор упомянул:
Очевидно, что компилятор фактически не создает С#, но я использовал Reflector для декомпиляции кода как С#.
в том же параграфе, под названием Обзор высокого уровня: какой шаблон?
Возможно оба. Сложно скомпилировать собранные сборки с помощью Reflector. И спецификация языка С#, которая определяет, как скомпилированы различные синтаксически-слащавые вещи, является общедоступным документом. Автор мог использовать либо подход, либо смесь двух.
Посмотрите ildasm, чтобы посмотреть на скомпилированный IL.
(Действительно, это весело, когда вы попадаете в глаза)
.NET CLR на самом деле имеет форму сборки, называемую MSIL, а также ассемблер и дизассемблер. Итак, да, вы можете скомпилировать код, а затем просмотреть точные скомпилированные инструкции CLR.
dotPeek от JetBrains
https://www.jetbrains.com/decompiler/
Он бесплатный и простой в использовании:)