2016-07-25 1 views
0

В моем вопросе рассматривается проверка унаследованных атрибутов свойств.Attribute.IsDefined vs MemberInfo.IsDefined - разница унаследованного параметра

Как описано в this Question методы Attribute.IsDefined(MemberInfo, Type, Boolean)(1) и MemberInfo.IsDefined(Type, Boolean)(2) в основном такие же. Оба проверяют, используется ли атрибут. Но существует серьезная разница в параметре наследуют, если я хочу, чтобы проверить свойство:

(1):

Если это правда, задающий также поиск предков элемента для пользовательских атрибутов.

(2):

верно для поиска цепочки наследования этого члена найти атрибуты; в противном случае - false. Этот параметр игнорируется для свойств и событий; см. Примечания.

(Высказывания только рекомендовать использование (1))

подмигнули нет проблем использовать (1), чтобы получить унаследованный атрибут свойства. Но мой вопрос: почему: Почему эта функция реализована так? В чем причина, использование или польза? С моей точки зрения, существует метод, который игнорирует параметр и не очень чистое решение.

Я что-то упустил?

ответ

2

Мое предположение (и это is не более угадывание) - причина обратной совместимости.

PropertyInfo.IsDefined и EventInfo.IsDefined игнорировали параметр inherit, так как они были введены в .NET 1.0. Статические методы на Attribute были представлены в .NET 2.0 и были изменены для поддержки наследования свойств и событий. Если бы они изменили это поведение, старый код, который установил inherit в true, может начать получать неожиданные атрибуты.

Только одно из многих несоответствий в BCL ... :)