¿Por qué icustomatTributeProvider.getCustomAtTributes () return Object [] en lugar de atributo []?

StackOverflow https://stackoverflow.com/questions/5823790

Pregunta

Por que ICustomAttributeProvider.GetCustomAttributes() devolver object[] en vez de Attribute[]?

¿Hay alguna circunstancia al usar el ICustomAttributeProvider Las implementaciones de MSCORLIB y los ensambles del sistema devolverán objetos que no son de tipo Attribute?

¿Fue útil?

Solución

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

Si bien cualquier tipo definido por el usuario puede usarse como atributo, el cumplimiento de CLS requiere que los atributos sean instancias de tipos cuya clase base sea System.Attribute.

En otras palabras, un lenguaje que no es compatible con CLS puede permitirle especificar atributos que no se derivan de Attribute, entonces el GetCustomAttributes El método probablemente esté diseñado para permitir que se consuman tales atributos.

Estoy bastante seguro de que no existe tal lenguaje que no cumpla con CLS, y .NET no lo admite, pero uno puede imaginar que los diseñadores de reflexión no querían impedir la posibilidad en el futuro.

En cuanto a su segunda pregunta, una inspección rápida del código fuente para System.Reflection muestra que siempre obtienes un Attribute[] espalda. Dado que los objetos devueltos son siempre Attribute[], puedes lanzarlos de manera segura, pero no hay garantía de que siempre funcionará de esa manera.

Otros consejos

Al echar un vistazo rápido con el reflector, en cada lugar se usa, realizan un elenco seguro para atribuir [], por lo que supongo que es seguro que hagas lo mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top