Dlaczego w Attributes.IsDefined () brakuje przeciążeń?


165

Zainspirowany pytaniem SO. Klasa Attribute ma kilka przeciążeń dla metody IsDefined () . Objęte są atrybuty zastosowane do Assembly, Module, MemberInfo, ParameterInfo. Przeciążenie MemberInfo obejmuje PropertyInfo, FieldInfo, EventInfo, MethodInfo, ConstructorInfo.

To zajmuje się większością atrybutów AttributeTargets. Z wyjątkiem jednego biggy: nie ma przeciążenia dla Attribute.IsDefined (Type, Type), dzięki czemu można sprawdzić, czy atrybut jest zdefiniowany w klasie. Lub struct, delegate lub enum w tym przypadku.

Nie żeby to był prawdziwy problem, Type.GetCustomAttributes () może to naprawić. Ale wszystkie typy BlahInfo też to mają. Zastanawiam się nad brakiem symetrii. Nie potrafię określić, dlaczego byłby to problem dla Type. Zgadywanie problemu spadkowego mi tego nie wyjaśnia. Posiadanie ValueType w miksie może być wskazówką, ale nadal nie ma sensu. Nie kupuję „zapomnieli”, oni nigdy tego nie robią.

Dlaczego brakuje tego przeciążenia?

Odpowiedzi:


170

Jest System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)i System.Typepochodzi od System.Reflection.MemberInfo.

Zestaw, który jest kontenerem najwyższego poziomu dowolnego zestawu .NET, ma co najmniej jeden moduł. Każdy moduł zawiera typy, a typy mogą mieć elementy członkowskie, takie jak właściwości, metody lub nawet inne typy (typy zagnieżdżone). Dlatego System.Typewywodzi się z, MemberInfowięc model obiektowy pozwala, aby typy działały jako kontenery, wszystkie elementy członkowskie, w tym inne typy.


Przeciążenie też ICustomAttributeProvidermiałoby sens.
Pan Anderson
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.