Таким образом, все мы знаем, что C# не имеет подобного C макро-препроцессора (и существует хороший поток на почему здесь). Но теперь, когда AOP наращивает обороты, кажется, что мы начинаем делать материал с постпроцессорами, которые мы раньше делали с препроцессорами (примите во внимание, что я только намочил ноги с PostSharp так, возможно, от основы).
Я - огромный поклонник атрибутов в C#, но если препроцессор был не учтен на серьезных основаниях (который, как бывший пользователь MFC я все еще вопрос, но тем не менее принимает), почему код посткомпиляции является инжекцией лучшая идея, чем предварительная компиляция кодирует инжекцию?
Причины, по которым я выбрал посткомпиляцию при разработке PostSharp 5 лет назад:
При этом реализации АОП для C / C ++ действительно являются предварительным компилятором (WeaveC), а реализации на Java - расширением компилятора (по той хорошей причине, что существует множество реализаций OSS компилятора Java).
-gael
Технически существует предварительная возможность компиляции для C #, встроенная в Visual Studio: Text Template Transformation Toolkit (T4) . Это позволяет вам делать удивительные вещи на этапе предварительной компиляции и является основой для многих продуктов, таких как некоторые ORM и т. Д.
Если бы Вы выполняли предварительную компиляцию, Вам пришлось бы интерпретировать исходные файлы со всех поддерживаемых Вами языков, а затем генерировать код на этом языке, прежде чем он будет передан компилятору. С помощью пост-обработки можно просто использовать рефлексию для изучения ассемблеров, будь то исходный язык C#, Visual Basic или что-то в этом роде.
Это просто проще. IL чертовски легче анализировать, чем исходный код C #. И это не зависит от языка.