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

StackOverflow https://stackoverflow.com/questions/5823790

Вопрос

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

Есть ли обстоятельства при использовании ICustomAttributeProvider Реализации из MSCORLIB и системных сборок возвращают объекты, которые не имеют типа Attribute?

Это было полезно?

Решение

CLI Spec (ECMA 335) Раздел II, пункт 21 Государства частично:

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

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

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top