Warum fehlen bei Attributes.IsDefined () Überladungen?

165

Inspiriert von einer SO-Frage. Die Attributklasse hat mehrere Überladungen für die IsDefined () -Methode. Es werden Attribute behandelt, die auf Assembly, Module, MemberInfo, ParameterInfo angewendet werden. Die MemberInfo-Überladung umfasst PropertyInfo, FieldInfo, EventInfo, MethodInfo, ConstructorInfo.

Damit sind die meisten AttributeTargets erledigt. Abgesehen von einem großen Problem: Es gibt keine Überladung für Attribute.IsDefined (Typ, Typ), sodass Sie überprüfen können, ob ein Attribut für eine Klasse definiert ist. Oder eine Struktur, ein Delegat oder eine Aufzählung für diese Angelegenheit.

Nicht dass dies ein echtes Problem ist, Type.GetCustomAttributes () kann das beheben. Aber alle BlahInfo-Typen haben dies auch. Ich wundere mich über die mangelnde Symmetrie. Ich kann nicht sagen, warum dies für Type ein Problem wäre. Das Erraten eines Vererbungsproblems erklärt es mir nicht. ValueType in der Mischung zu haben, könnte ein Hinweis sein, macht aber immer noch keinen Sinn. Ich kaufe nicht "sie haben es vergessen", sie tun es nie.

Warum fehlt diese Überlastung?

Hans Passant
quelle

Antworten:

170

Es gibt ein System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)und System.Typeleitet sich von ab System.Reflection.MemberInfo.

Eine Assembly, die der Container der obersten Ebene einer .NET-Assembly ist, verfügt über ein oder mehrere Module. Jedes Modul enthält dann Typen und Typen können Elemente wie Eigenschaften, Methoden oder sogar andere Typen (verschachtelte Typen) haben. Aus diesem Grund wird System.Typeabgeleitet MemberInfo, dass das Objektmodell es Typen ermöglicht, als Container alle Elemente zu bearbeiten, einschließlich anderer Typen.

John Leidegren
quelle
Überlastung für ICustomAttributeProviderwürde auch sehr viel Sinn machen.
Herr Anderson