PostSharp 2.0 намного ближе к AspectJ, чем PostSharp 1.5. Сравнение PostSharp 1.5 с Spring AOP было оправданным, но больше не с PostSharp 2.0.
Однако в подходе все еще есть некоторые существенные различия.
Подход к pointcuts радикально отличается. AspectJ предоставляет сложный язык pointcut. PostSharp предоставляет базовую декларативную систему pointcut , но позволяет разрабатывать императивные pointcut, чтобы вы могли писать код (обычно с использованием System.Reflection), который оценивает pointcut во время компиляции. Поэтому вместо языка pointcut PostSharp поддерживает простой C # или Linq.
Действительно, нет условного pointcut (cflow).
PostSharp поддерживает семантику высшего порядка, такую как события и свойства. AspectJ, насколько мне известно, не (так как в Java нет ни одного события или свойства).
Аспекты PostSharp обычно создаются и инициализируются во время сборки, затем сериализуются в сборку и десериализуются во время выполнения для выполнения. Это позволяет аспекту «инициализировать» во время сборки, поэтому производительность во время выполнения лучше. Он также позволяет выполнять произвольно сложную логику во время сборки (обычно инициализация, оценка точки среза, проверка точки соединения).
PostSharp имеет реальную поддержку композиции аспектов, то есть вы можете применять несколько аспектов или советов к одной и той же точке соединения прогнозирующим образом. PostSharp разработан для сценария с несколькими поставщиками, когда поставщики с несколькими аспектами не знают друг о друге. Он имеет сложную систему зависимостей, где разработчики / поставщики аспектов могут указывать декларативно упорядочивающие ограничения, требования и конфликты.
Начиная с версии 2.0, PostSharp поставляется с инструментами IDE, которые частично покрывают функциональность «AJDT» для Eclipse.