所以我们都知道C#没有类似C的宏预处理器(并且有一个很好的线程来解释为什么here)。但是现在AOP正在获得牵引力,似乎我们开始使用后处理器(我们曾经使用预处理器)做的事情(请记住,我只是在PostSharp弄湿了所以我可能不在基地。)
我是C#中属性的忠实粉丝,但是如果一个预处理器被遗漏了很多原因(作为一个前MFC用户,我仍然质疑但仍然接受)为什么编译后代码注入更好的主意比预编译代码注入?
答案 0 :(得分:6)
我在5年前设计PostSharp时选择后期编辑的原因是:
也就是说,AOP for C / C ++的实现确实是预编译器(WeaveC),Java中的实现是编译器扩展(出于很多原因,Java编译器有很多OSS实现)。
-gael
答案 1 :(得分:4)
从技术上讲,Visual Studio中内置了一个预编译选项:Text Template Transformation Toolkit (T4)。这使您可以在预编译步骤中完成相当惊人的事情,并且是很多产品的基础,例如一些ORM等。
答案 2 :(得分:2)
如果您要进行预编译,则必须从您支持的所有不同语言中解释源文件,然后在将该语言传递给编译器之前生成该语言的代码。通过后处理,您可以简单地使用反射来检查程序集,无论原始语言是C#,Visual Basic还是其他任何内容。
答案 3 :(得分:2)
这更简单。 IL是一个比C#源代码更容易解析的heckofalot。它与语言无关。