Я думаю, что вы неправильно понимаете, да. Атрибут не является кодом, который выполняется до или после запуска вашего метода. Атрибут - это часть метаданных, прикрепленных к методу (или классу и т. Д.). Используя отражение, можно написать код для чтения этих метаданных.
Вот лучший пример, который я могу придумать:
Платформа бизнес-объектов, которую я использую, имеет концепцию DataPortal. В многоуровневой среде DataPortal сидит на сервере и выполняет методы CRUD моих бизнес-объектов. DataPortal был написан таким образом, что перед вызовом любого из моих методов CRUD сначала проверяется, имеет ли метод атрибут RunMeInATransaction
. Если это так, он создает транзакцию, запускает метод и затем фиксирует транзакцию. Концептуально это очень похоже на методы, имеющие свойства; мои методы могут иметь свойство RunMeInATransaction
.