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


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

Примечание.

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

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

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

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

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

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

✔️ ПРИСВАИВАЙТЕ классам настраиваемых атрибутов имена с суффиксом "Attribute".

✔️ ПРИМЕНЯЙТЕ атрибут AttributeUsageAttribute к настраиваемым атрибутам.

✔️ ПРЕДОСТАВЛЯЙТЕ настраиваемые свойства для необязательных аргументов.

✔ ПРЕДОСТАВЛЯЙТЕ свойства, отвечающие только за получение, для обязательных аргументов.

✔️ ПРЕДОСТАВЛЯЙТЕ параметры конструктора для инициализации свойств, соответствующих обязательным аргументам. Имя каждого параметра должно совпадать (но в другом регистре) с именем соответствующего свойства.

❌ ИЗБЕГАЙТЕ️ предоставления параметров конструктора для инициализации свойств, соответствующих обязательным аргументам.

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

❌ ИЗБЕГАЙТЕ перегрузки конструкторов настраиваемых атрибутов.

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

✔️ ЗАПЕЧАТЫВАЙТЕ классы настраиваемых атрибутов, если это возможно. Это позволяет ускорить поиск атрибута.

Фрагменты: © Корпорация Майкрософт (Microsoft Corporation), 2005, 2009. Все права защищены.

Перепечатано с разрешения Pearson Education, Inc. из книги Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET (2-е издание), авторы: Кржиштоф Цвалина (Krzysztof Cwalina) и Брэд Абрамс (Brad Abrams). Книга опубликована 22 октября 2008 г. издательством Addison-Wesley Professional в рамках серии, посвященной разработке для Microsoft Windows.

См. также