.Net developer, data scientist
Код описывает программу, однако кроме кода существуют определённые данные, которые описывают сам код и в зависимости от значений этих данных возможно влияние на работу кода. Такие данные называются атрибутами. Представим, что код — это набор определенных инструкций, тогда атрибутами можно назвать советы как выполнить данные инструкции наилучшим образом или наиболее эффективно. Всё зависит от действий предпринятым программистом в ответ на наличие атрибутов.
Атрибуты могут быть добавлены к различным частям кода: к декларациям классов, методам, свойствам, аргументам. Следует понимать, что код будет отлично выполняться и без атрибутов, однако если атрибуты будут добавлены, то пользователи нашего кода смогут обнаружить эти атрибуты и предпринять определенные действия в зависимости от значения атрибутов. Если код содержит атрибуты, однако ничто не проверяет их значение, то код будет выполняться, как если бы атрибутов не было. Атрибуты сами по себе пассивны – они не выполняются, как код, а только содержат значения, которые мы можем использовать для управления работой кода.
Как программисты могут определить есть ли в коде атрибуты не имея доступ к исходному коду. Для этих целей используется рефлексия. Рефлексия – это процесс, во время которого программа может отслеживать и модифицировать собственную структуру и поведение во время выполнения. Одной из функций рефлексии является чтение атрибутов. Используя рефлексию, можно определить есть ли в данном месте (в декларации класса, метода, свойства, аргумента) атрибут определенного типа и если да, то получить объект атрибута данного типа, через который мы получаем доступ к значениям данных атрибута.
Где атрибуты встречаются наиболее часто:
Что еще можно сказать об атрибутах? К одному члену можно приписать не только один, а даже несколько атрибутов. Можно также ограничить использование атрибутов только для определенных членов – например атрибут только для классов или только для свойств.