¿Por qué falta Attributes.IsDefined () sobrecargas?

165

Inspirado en una pregunta SO. La clase Attribute tiene varias sobrecargas para el método IsDefined () . Los atributos cubiertos se aplican a Ensamblaje, Módulo, Información de miembro, Información de parámetro. La sobrecarga de MemberInfo cubre PropertyInfo, FieldInfo, EventInfo, MethodInfo, ConstructorInfo.

Eso se encarga de la mayoría de los AttributeTargets. Excepto por un biggy: no hay sobrecarga para Attribute.IsDefined (Type, Type) para que pueda verificar si un atributo está definido en una clase. O una estructura, delegado o enumeración para el caso.

No es que este sea un problema real, Type.GetCustomAttributes () puede solucionarlo. Pero todos los tipos de BlahInfo también tienen esto. Me pregunto por la falta de simetría. No puedo señalar por qué esto sería un problema para Type. Adivinar un problema de herencia no me lo explica. Tener ValueType en la mezcla puede ser una ventaja, aún no tiene sentido. No compro "se olvidaron", nunca lo hacen.

¿Por qué falta esta sobrecarga?

Hans Passant
fuente

Respuestas:

170

Hay un System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)y System.Typederiva de System.Reflection.MemberInfo.

Un ensamblaje, que es el contenedor de nivel superior de cualquier ensamblado .NET, tiene uno o más módulos. Cada módulo contiene tipos y los tipos pueden tener miembros como propiedades, métodos o incluso otros tipos (tipos anidados). Es por eso que se System.Typederiva de MemberInfoque el modelo de objetos permite que los tipos funcionen como contenedores de todos los elementos, incluidos otros tipos.

John Leidegren
fuente
La sobrecarga también ICustomAttributeProvidertendría mucho sentido.
Sr. Anderson