Чому в Attributes.IsDefined () відсутні перевантаження?


165

Натхненний питанням SO. Клас Attribute має кілька перевантажень для методу IsDefined () . Покриті - атрибути, застосовані до збірки, модуля, MemberInfo, ParameterInfo. Перевантаження MemberInfo охоплює PropertyInfo, FieldInfo, EventInfo, MethodInfo, ConstructorInfo.

Це стосується більшості цілей AttributeTargets. За винятком однієї великої версії: для Attribute.IsDefined (Type, Type) немає перевантаження, щоб ви могли перевірити, чи визначений атрибут у класі. Або структура, делегат або переконання з цього питання.

Не те, що це справжня проблема, Type.GetCustomAttributes () може виправити це. Але у всіх типів BlahInfo є і це. Мені цікаво відсутність симетрії. Я не можу покласти пальця на те, чому це було б проблемою для типу. Вгадування проблеми спадкування мені не пояснює. Наявність ValueType у суміші може бути ведучим, але все ще не має сенсу. Я не купую "вони забули", вони ніколи не роблять.

Чому відсутня ця перевантаження?

Відповіді:


170

Там є System.Attribute.IsDefined(MemberInfo element, Type attributeType, bool inherit)і System.Typeпоходить відSystem.Reflection.MemberInfo .

Збірка, яка є контейнером верхнього рівня будь-якої збірки .NET, має один або кілька модулів. Кожен модуль містить типи і типи, можуть мати членів, таких як властивості, методи або навіть інші типи (вкладені типи). Ось чому System.Typeвипливає з MemberInfoтого, що об'єктна модель дозволяє типам працювати контейнерами всіх речей, включаючи інші типи.


Перевантаження також ICustomAttributeProviderматиме багато сенсу.
Містер Андерсон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.