Почему ICustomAttributeProvider.GetCustomAttributes () возвращает объект [] вместо атрибута []? - PullRequest
21 голосов
/ 28 апреля 2011

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

Существуют ли какие-либо обстоятельства при использовании реализаций ICustomAttributeProvider из сборок mscorlib и System, которые будут возвращать объекты, не относящиеся к типу * 1007?*

Ответы [ 2 ]

23 голосов
/ 08 мая 2011

В спецификации CLI ( ECMA 335 ), раздел II, раздел 21, указано:

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

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

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

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

3 голосов
/ 28 апреля 2011

Быстро просматривая Reflector, в любом месте, где он используется, они выполняют безопасное приведение к Атрибуту [], так что, я думаю, вам безопасно делать то же самое.

...