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.
¿Puede señalar alguna instancia específica de esto? – Gabe