Почему 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
, так что объектная модель позволяет типам работать как контейнеры со всеми элементами, включая другие типы.