Поделиться через


Атрибуты (рекомендации по проектированию .NET Framework)

Замечание

Это содержимое перепечатывается разрешением Pearson Education, Inc. из руководства по проектированию платформы: соглашения, идиомы и шаблоны для повторно используемых библиотек .NET, 2-го выпуска. Этот выпуск был опубликован в 2008 году, и книга с тех пор была полностью пересмотрена в третьем выпуске. Некоторые сведения на этой странице могут быть устаревшими.

System.Attribute — это базовый класс, используемый для определения пользовательских атрибутов.

Атрибуты — это заметки, которые можно добавить к элементам программирования, таким как сборки, типы, элементы и параметры. Они хранятся в метаданных сборки и могут быть доступны во время выполнения с помощью API отражения. Например, платформа определяет ObsoleteAttribute, который можно применить к типу или члену, чтобы указать, что тип или член не рекомендуется.

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

При применении атрибута необходимо указать некоторые свойства атрибута. Они называются обязательными свойствами или обязательными аргументами, так как они представлены как параметры позиционного конструктора. Например, ConditionString свойство ConditionalAttribute объекта является обязательным.

Свойства, которые не обязательно должны быть указаны при применении атрибута, называются необязательными свойствами (или необязательными аргументами). Они представлены настраиваемыми свойствами. Компиляторы предоставляют специальный синтаксис для задания этих свойств при применении атрибута. Например, AttributeUsageAttribute.Inherited свойство представляет необязательный аргумент.

✔️ Рекомендуется называть пользовательские классы атрибутов с суффиксом "Attribute".

✔️ Применяйте AttributeUsageAttribute к пользовательским атрибутам.

✔️ Предоставьте настраиваемые свойства для необязательных аргументов.

✔️ Укажите свойства только для получения необходимых аргументов.

✔️ Укажите параметры конструктора для инициализации свойств, соответствующих необходимым аргументам. Каждый параметр должен иметь одинаковое имя (хотя и с разными регистрами) в качестве соответствующего свойства.

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

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

❌ Избегайте перегрузки настраиваемых конструкторов атрибутов.

Наличие только одного конструктора четко сообщает пользователю, какие аргументы являются обязательными и которые являются необязательными.

✔️ Если это возможно, закрывайте пользовательские классы атрибутов. Это ускоряет поиск атрибута.

© Часть 2005, 2009 Корпорация Майкрософт. Все права защищены.

Перепечатан с разрешения Pearson Education, Inc. из Руководство по проектированию: Соглашения, идиомы и шаблоны для повторного использования библиотек .NET, 2-е издание Кшиштоф Чвалина и Брэд Абрамс, опубликованное 22 октября 2008 года Addison-Wesley Профессиональный в рамках серии разработки Microsoft Windows.

См. также