ICustomAttributeProvider.GetCustomAttributes (...): Дизайн странный? - PullRequest
4 голосов
/ 23 июня 2010

Документация MSDN: Метод MemberInfo.GetCustomAttibutes (Type, Boolean) говорится в комментариях:

Этот метод игнорирует параметр наследования для свойств и событий. Для поиска в цепочке наследования атрибутов свойств и событий используйте соответствующие перегрузки метода Attribute.GetCustomAttributes.

Это в основном означает, что второй параметр этой реализации (bool inherit) игнорируется для членов события и членов свойства . Однако, вызов Attribute.GetCustomAttributes(MemberInfo,Type,bool) разнообразия этой операции не делает.

Что меня озадачивает, так это дизайн.

Почему они, казалось бы, игнорируют атрибут наследования произвольно в 2 формах типов членов?

Если бы кто-нибудь мог пролить свет на это, я был бы очень признателен.

1 Ответ

1 голос
/ 23 июня 2010

Это определенно сбивает с толку. Строгий ответ - свойства и события не наследуются, поэтому параметр inherited не имеет значения. Ссылка: ECMA 335 CLI Спецификация раздел 8.10.3.

Принципиально, свойства и события являются конструкциями метаданных предназначен для использования инструментами, которые нацелены CLI и напрямую не поддерживаются самой VES. Следовательно, это работа исходного языка компилятор и библиотека отражений (см. раздел IV) для определения правил для сокрытия имени, наследования и т. д. вперед. Исходный компилятор должен генерировать CIL, который напрямую обращается методы, названные событиями и свойства, а не события или сами свойства.

В спецификации ничего не говорится о том, как компилятор должен это реализовывать. В случае C # свойства реализуются через отдельные методы получения и установки, которые могут быть объявлены virtual и override. Аналогично, для событий существуют отдельные методы addhandler и removehandler.

Таким образом, простой ответ заключается в том, что свойства и события являются строго метаданными, лишенными какой-либо реализации согласно спецификации. Вот почему они не могут наследоваться в том же смысле, что и методы.

...