property net custom attributetargets attribute asp c# .net system.reflection getcustomattributes

net - declare attribute c#



¿Por qué ICustomAttributeProvider.GetCustomAttributes() devuelve el objeto[] en lugar del atributo[]? (2)

Al echar un vistazo rápido con Reflector, en todos los lugares en que se utilizan, realizan una conversión segura a Atributo [], por lo que creo que es seguro que usted haga lo mismo.

¿Por qué ICustomAttributeProvider.GetCustomAttributes() devuelve el object[] lugar del Attribute[] ?

¿Existe alguna circunstancia al usar las implementaciones de ICustomAttributeProvider desde mscorlib y los ensamblados del sistema devolverán objetos que no son de tipo Attribute ?


La especificación de la CLI ( ECMA 335 ), Parte II, Cláusula 21 establece en parte:

Si bien cualquier tipo definido por el usuario puede usarse como un 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 los Attribute , por lo que el método GetCustomAttributes probablemente está diseñado para permitir que dichos atributos se consuman.

Estoy bastante seguro de que no existe un lenguaje que no sea compatible con CLS, y .NET no lo admite, pero se puede imaginar que los diseñadores de Reflection no quisieron impedir 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[] vuelta. Dado que los objetos devueltos siempre son Attribute[] , puede lanzarlos de forma segura, pero no hay garantía de que siempre funcionará de esa manera.