Большинство используются только во время выполнения. Компилятор использует очень ограниченное число, включая:
[Conditional(...)]
- опускать вызовы методов на символы сборки
[Obsolete(...)]
- выдать предупреждение / ошибку в качестве результата сборки
[Serializable]
- записывается как флаг CLI
[Extension]
- используется для методов расширения
[AttributeUsage]
- влияет на применение атрибутов
Существует ряд таких вещей, как [AssemblyVersion]
, [AssemblyFileVersion]
и т. Д., Которые используются компилятором при создании файла сборки, и такие вещи, как [InternalsVisibleTo]
, которые влияют на доступность.
Кроме того, такие инструменты, как PostSharp, выполняют дополнительные шаги после компиляции на основе атрибутов.
Есть некоторые другие атрибуты, которые компилятор может добавить к сгенерированным типам / методам (для anon-методов / типов, блоков итераторов и т. Д.).