Почему в Attributes.IsDefined () отсутствуют перегрузки? - PullRequest
163 голосов
/ 12 июня 2010

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

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

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

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

1 Ответ

169 голосов
/ 12 июня 2010

Существует System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit) и System.Type происходит от System.Reflection.MemberInfo.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...