Достаточно много времени до меня не доходило что же за такая штука эти Атрибуты.
Сел, разобрался, прочитал непонятные определения и предлагаю полученное мной понимание о том что же это такое.
Атрибут — это класс, унаследованный от базового класса Attribute.
Суть атрибута в том, что он используется для генерации описаний. Создав атрибут вы можете наделить его своими свойствами которыми вы желаете наградить класс, поле, свойство или метод, Атрибут не влияет на значение полей и свойств и на выполнение методов класса, если в теле метода не учитывается информация хранящаяся в атрибуте. Но есть очень важный момент — Значение атрибута невозможно изменять в процессе выполнения кода, так как значения их свойств хранятся в виде констант в скомпилированном модуле
Например с помощью атрибутов вы можете проанализировав их значения для типа построить различные схемы выполнения действий над ним.
Не очень понятно, тогда пример:
Есть арибут:
public class MyAttribute : Attribute // создаём собственный атрибут наследуясь от стандартного класса
{
public int Count { get; set; } // создаём своё свойство которое будет содержать атрибут
// можно описать несколько свойств но для примера создаётся только одно
}
И некий класс который мы наградим описанным атрибутом и будем использовать его значение для формирования результата функции GetArray:
[MyAttribute{ Count = 3 }]
public class IntArrayInitializer
{
public int[] GetArray()
{
var type = this.GetType(); // получение описания типа
if (Attribute.IsDefined(type, typeof(MyAttribute))) // проверка на существование атрибута
{
var attributeValue = Attribute.GetCustomAttribute(type, typeof(MyAttribute)) as MyAttribute; // получаем значение атрибута
return new int[attributeValue.Count]; // используем значение атрибута для формирования результата
}
return new int[0];
}
}
Как видно из кода, сначала мы получаем описание нашего класса, далее проверяем наличие нашего атрибута и в случае его наличия мы формируем массив с указанным в атрибуте количеством элементов.
А теперь унаследовавшись от этого класса и задав новому классу другое значение атрибута при вызове метода мы получим массив нужной размерности.
Данная статья даёт только общее и скудное описание атрибутов, но используя его, можно понять, что это такое.
Автор: Windstorm