2010-06-11 7 views
159

Inspiré par une question SO. La classe Attribute a plusieurs surcharges pour la méthode IsDefined(). Couvertes sont des attributs appliqués à Assembly, Module, MemberInfo, ParameterInfo. La surcharge MemberInfo couvre PropertyInfo, FieldInfo, EventInfo, MethodInfo, ConstructorInfo.Pourquoi est-ce que Attributes.IsDefined() manque des surcharges?

Cela prend en charge la plupart des AttributeTargets. Sauf pour un biggy: il n'y a pas de surcharge pour Attribute.IsDefined (Type, Type) de sorte que vous pouvez vérifier si un attribut est défini sur une classe. Ou un struct, délégué ou enum pour cette question.

Ce n'est pas un problème réel, Type.GetCustomAttributes() peut résoudre ce problème. Mais tous les types BlahInfo l'ont aussi. Je m'interroge sur le manque de symétrie. Je ne peux pas mettre le doigt sur pourquoi cela serait un problème pour Type. Deviner un problème d'héritage ne me l'explique pas. Avoir ValueType dans le mélange pourrait être une piste, n'a toujours pas de sens. Je n'achète pas "ils ont oublié", ils ne le font jamais.

Pourquoi cette surcharge est-elle absente?

Répondre

165

Il y a un System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit) et System.Type dérive de System.Reflection.MemberInfo.

Un assembly, qui est le conteneur de niveau supérieur de tout assembly .NET, comporte un ou plusieurs modules. Chaque module contient alors des types et des types pouvant avoir des membres tels que des propriétés, des méthodes ou même d'autres types (types imbriqués). C'est pourquoi System.Type dérive de MemberInfo de sorte que le modèle d'objet permette aux types de fonctionner comme des conteneurs de tous les éléments, y compris d'autres types.

+0

La surcharge de 'ICustomAttributeProvider' aurait aussi beaucoup de sens. –

Questions connexes