Почему Attributes.IsDefined() отсутствуют перегрузки?

Вдохновленный вопросом SO. Класс Attribute имеет несколько перегрузок для метода IsDefined(). Покрытыми являются атрибуты, применяемые к Assembly, Module, MemberInfo, ParameterInfo. Перегрузка MemberInfo охватывает PropertyInfo, FieldInfo, EventInfo, MethodInfo, ConstructorInfo.

Это касается большинства атрибутов. За исключением одной крупногабаритной: нет перегрузки для Attribute.IsDefined(Type, Type), чтобы вы могли проверить, определен ли атрибут в классе. Или struct, delegate или enum, если на то пошло.

Не то, чтобы это настоящая проблема, Type.GetCustomAttributes() может это исправить. Но все типы BlahInfo тоже есть. Я удивляюсь отсутствию симметрии. Я не могу сказать, почему это проблема для Type. Угадать проблему наследства мне это не объясняет. Наличие ValueType в миксе может быть лидером, но не имеет смысла. Я не покупаю "они забыли", они никогда этого не делают.

Почему эта перегрузка отсутствует?

Ответ 1

Там a System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit) и System.Type происходит от System.Reflection.MemberInfo.

Сборка, которая является контейнером верхнего уровня любой сборки .NET, имеет один или несколько модулей. Каждый модуль затем содержит типы и типы, которые могут иметь элементы, такие как свойства, методы или даже другие типы (вложенные типы). Поэтому System.Type происходит от MemberInfo, так что объектная модель позволяет типам работать как контейнеры со всеми элементами, включая другие типы.