Подтвердить что ты не робот

Почему ICustomAttributeProvider.GetCustomAttributes() возвращает объект [] вместо атрибута []?

Почему ICustomAttributeProvider.GetCustomAttributes() возвращает object[] вместо Attribute[]?

Есть ли какие-либо обстоятельства при использовании реализаций ICustomAttributeProvider от mscorlib и системных сборок будут возвращать объекты, которые не относятся к типу Attribute?

4b9b3361

Ответ 1

Спецификация CLI (ECMA 335) Раздел II, пункт 21, частично заявляет:

В то время как любой пользовательский тип может использоваться как атрибут, соответствие CLS требует, чтобы атрибуты были экземплярами типы, базовый класс которых System.Attribute.

Другими словами, язык, не совместимый с CLS, может указывать атрибуты, которые не являются результатом Attribute, поэтому метод GetCustomAttributes, вероятно, предназначен для использования таких атрибутов.

Я уверен, что нет такого языка, не совместимого с CLS, и .NET не поддерживает его, но можно себе представить, что дизайнеры Reflection не хотели исключать возможность в будущем.

Что касается вашего второго вопроса, быстрый просмотр исходного кода для System.Reflection показывает, что вы всегда получаете Attribute[] назад. Поскольку возвращаемые объекты всегда Attribute[], вы можете безопасно их отбросить, но нет гарантии, что он всегда будет работать таким образом.

Ответ 2

С помощью быстрого отражения с Reflector, в каждом месте он используется, они выполняют безопасный листинг в Attribute [], поэтому, я думаю, вам будет безопасно делать то же самое.