Зависит от атрибута.
«Нормальные» атрибуты, такие как CLSCompliantAttribute не делать что-либо во время выполнения (если только вы не пытаетесь их прочитать, в этом случае они создаются); это просто метаданные, описывающие данные / код, которые иногда используются компилятором и / или отладчиком для помощи программисту.
«Специальные» атрибуты, ну, в общем, особенные. Они могут изменять флаги в коде, вызывать изменение поведения CLR или вызывать другие заметные изменения; это зависит от атрибута. (Например, FieldOffsetAttribute может привести к изменению макета поля, что, очевидно, является наблюдаемым эффектом времени выполнения.)
extreme пример изменения поведения можно увидеть с помощью ProxyAttribute , в этом случае вы можете в значительной степени перехватить весь код для класса (даже конструктора).
Другие примеры таких «специальных» атрибутов включают InAttribute
, OutAttribute
, ThreadStaticAttribute
, MTAThreadAttribute
, TypeForwardedToAttribute
(I думаю ), ComImportAttribute
, DllImportAttribute
, и т. д., и т. п., на самом деле их довольно много!