Есть ли у порядка атрибутов какие-либо гарантии? - PullRequest
7 голосов
/ 11 февраля 2010

Если к элементу применено несколько атрибутов, например,

[Foo]
[Bar]
void Baz() { ... }

Тогда есть ли какие-либо гарантии со стороны спецификаций CLR / .NET относительно того, в каком порядке они будут извлекаться при отражении (например, Attribute.GetCustomAttributes)? Документация по этим методам не делает их явными, и, хотя кажется, что они возвращаются в том порядке, в котором они применяются, я не хочу полагаться на недокументированное поведение, так как это просто вызывает проблемы.

Что касается того, почему это может быть важно, представьте, что атрибуты используются для указания того, что метод должен иметь серию перехватчиков, которые должны выполняться в определенном порядке.

Ответы [ 3 ]

12 голосов
/ 11 февраля 2010

Нет от 17.2 Спецификация атрибута это не так.

Порядок, в котором атрибуты указанный в таком списке, а порядок, в котором разделы прикреплены к один и тот же программный объект устроен, не имеет значения. Например, спецификации атрибутов [A] [B], [B] [A], [A, B] и [B, A] являются эквивалент.

4 голосов
/ 11 февраля 2010

Полагаться на заказ такого рода вещей, как правило, плохая идея. Если порядок важен, я бы дал атрибуту свойство Priority, чтобы его можно было сделать очень явным.

Я не знаю никаких гарантий, что они будут получены в исходном порядке.

1 голос
/ 11 февраля 2010

Атрибуты imo не должны иметь порядок, поскольку они не являются конструкциями управления потоком.

Полагаю, вы могли бы добавить свойство приоритета к атрибуту и ​​использовать его для определения порядка выполнения?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...