Как уже отмечалось атрибут - это некоторая дополнительная информация, которая может быть приписана к типам, полям, методам, свойствам и некоторым другим конструкциям языка. Атрибуты помещаются в исполняемый файл и могут оттуда при необходимости извлекаться.
Все атрибуты .NET являются классами - потомками класса System.Attribute.
Атрибуты делятся на предопределенные (встроенные) и пользовательские, которые пишет программист. Таким образом, набор атрибутов .NET открыт для пополнения, т. е. программист может определять собственные атрибуты и применять их к вышеуказанным элементам своего кода.
Класс атрибута всегда должен иметь модификатор доступа public.
Назначаемый атрибут инициализируется вызовом конструктора с соответствующими параметрами. Таким образом, класс атрибута должен иметь хотя бы один public-конструктор.
Атрибут указывается в квадратных скобках перед элементом, которому он назначается. Например
[ObsoleteAttribute("Hallow World")]
По соглашению, имена всех атрибутов оканчиваются словом Attribute. Но в VisualStudio.NET при назначении атрибута можно не указывать суффикс Attribute. Так, вместо
[ObsoleteAttribute("Hallow World")]
можно записать
[Obsolete ("Hallow World")]
Атрибуты в программном коде используются следующим образом:
1. Определяется новый или берется существующий в .NET Framework атрибут;
2. Инициализируется конкретный экземпляр атрибута с помощью вызова конструктора атрибута.