Почему icustomattributeprovider.getCustomattributes () Возвращает объект [] вместо атрибута []?
-
26-10-2019 - |
Вопрос
Почему 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[]
, Вы можете с уверенностью разыграть их, но нет никакой гарантии, что это всегда будет работать таким образом.
Другие советы
Показывая с помощью отражателя, в каждом месте его используют, они выполняют безопасный состав для атрибута [], поэтому я думаю, что для вас безопасно делать то же самое.