Pourquoi ICustomAttributeProvider.GetCustomAttributes () objet de retour [] au lieu de l'attribut []?

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

Question

Pourquoi ICustomAttributeProvider.GetCustomAttributes() retour object[] au lieu de Attribute[]?

Y at-il des circonstances lors de l'utilisation des implémentations ICustomAttributeProvider d'ensembles de mscorlib et système retourne des objets qui ne sont pas de type Attribute?

Était-ce utile?

La solution

La spécification CLI ( ECMA 335 ) Partition II, l'article 21 dispose en partie:

Alors que tout type défini par l'utilisateur peut être utilisé comme un attribut, la conformité CLS exige que les attributs seront des instances de types dont la classe de base est System.Attribute.

En d'autres termes, une langue qui ne sont pas conformes CLS peut vous permettre de spécifier les attributs qui ne dérivent pas de Attribute, la méthode de GetCustomAttributes est probablement conçu pour permettre à ces attributs à consommer.

Je suis sûr que pas un tel langage non-conforme CLS existe, et .NET ne supporte pas, mais on peut imaginer que les concepteurs de réflexion ne voulaient pas exclure la possibilité à l'avenir.

En ce qui concerne votre deuxième question, une inspection rapide du code source pour les spectacles de System.Reflection que vous obtenez toujours un retour de Attribute[]. Étant donné que les objets retournés sont toujours Attribute[], vous pouvez en toute sécurité les entraînes, mais il n'y a aucune garantie que ce sera toujours fonctionner de cette façon.

Autres conseils

En prenant un coup d'œil avec réflecteur, en tout lieu, il est utilisé, ils effectuent une distribution sécuritaire Attribute [], donc je suppose qu'il est sûr pour vous de faire la même chose.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top