2011-04-28 33 views

Respuesta

22

La especificación CLI (ECMA 335) Partition II, Cláusula 21 estados en parte:

Mientras cualquier tipo definido por el usuario puede ser utilizado como un atributo, el cumplimiento CLS requiere que atributos se casos de tipos cuya clase base es System.Attribute.

En otras palabras, un lenguaje que no es compatible con CLS puede permitirle especificar atributos que no se derivan de Attribute, por lo que el método GetCustomAttributes es, probablemente, diseñado para permitir a las características descritas se pueden consumir.

Estoy bastante seguro de que no existe ese tipo de lenguaje no compatible con CLS, y .NET no lo admite, pero uno puede imaginar que los diseñadores de Reflection no quisieron excluir la posibilidad en el futuro.

En cuanto a su segunda pregunta, una inspección rápida del código fuente de System.Reflection muestra que siempre obtiene un Attribute[] de vuelta. Dado que los objetos devueltos siempre son Attribute[], puede lanzarlos con seguridad, pero no hay garantía de que siempre funcionen de esa manera.

3

Echando un vistazo rápido con Reflector, en cada lugar que se utiliza, realizan un lanzamiento seguro para Attribute [], por lo que supongo que es seguro para ti hacer lo mismo.

+0

¿Puede señalar alguna instancia específica de esto? – Gabe

Cuestiones relacionadas