2010-02-11 10 views
6

Si se aplican múltiples atributos a un miembro, p.¿El orden de los atributos tiene alguna garantía?

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

Entonces hay garantías hechas por las especificaciones/.NET CLR en cuanto a qué orden en que serán recuperados en cuando se recuperan mediante la reflexión (por ejemplo Attribute.GetCustomAttributes)? La documentación para estos métodos no lo hace explícito, y si bien parece ser que se devuelven en el orden en que se aplican, no quiero confiar en el comportamiento no documentado, ya que eso es solo un problema.

En cuanto a por qué esto podría ser importante, imagine que los atributos se utilizan para indicar que el método debe tener una serie de interceptores, que deben ejecutarse en un orden específico.

Respuesta

11

No de 17.2 Attribute specification parece que no.

El orden en que los atributos son especificado en dicha lista, y el orden en el que secciones unidas a la misma entidad de programa están dispuestos, no es significativo. Por ejemplo, las especificaciones de atributo [A] [B], [B] [A], [A, B] y [B, A] son ​​ equivalentes.

+0

Parece bastante concluyente, gracias. Es lo que esperaba ser honesto. –

3

Confiar en pedir este tipo de cosas generalmente es una mala idea. Si el orden es importante, le daría al atributo una propiedad de Prioridad para que pueda hacerse muy explícito.

No tengo ninguna garantía de que se recuperarán en el orden original.

+0

Sí, estoy de acuerdo. Les había dado una propiedad 'AspectOrder' para controlar esto, pero estaba intrigado sobre si era necesario garantizar el orden en lugar de la intención. –

1

imo Los atributos no deben tener un orden, ya que no son construcciones de control de flujo.

Supongo que podría agregar una propiedad de prioridad al atributo y usar eso para determinar el orden de ejecución.

+1

gargh - golpeado por Skeet, ¿por qué me molesto? ;) – RSlaughter

Cuestiones relacionadas