Поиск

Допустимые типы параметров атрибутов

Типы позиционных и именованных параметров класса атрибута ограничены следующим набором:

  • bool, byte, char, double, float, int, long, short, string;
  • System. Type',
  • object;
  • enum — при условии, что он и все типы, по отношению к которым он является вложенным, открытые (как в примере, где используется перечисление ульев реестра);
  • одномерный массив значений любого из вышеуказанных типов.

Поскольку набор типов параметров ограничен приведенным выше списком, вы не можете передавать конструктору структуры данных наподобие класса. Это ограничение имеет смысл, так как атрибуты прикрепляются в период разработки и в это время у вас не будет созданного экземпляра класса (объекта). Допускается применение вышеуказанных типов, так как они позволяют жестко запрограммировать их значения во время разработки.

Атрибут AttributeUsage

Кроме пользовательских параметров, которые вы задаете для аннотации обычных типов С#, с помощью атрибута AttributeUsage можно определить способ применения этих атрибутов. Согласно документации правила вызова атрибута. AttributeUsage таковы:

[AttributeUsage(
validon,
AllowMultiple = allomultlple,
Inherited = inherited
)3

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