Pull to refresh

Атрибуты в C#

Reading time 2 min
Views 61K
Достаточно много времени до меня не доходило что же за такая штука эти Атрибуты.

Сел, разобрался, прочитал непонятные определения и предлагаю полученное мной понимание о том что же это такое.

Атрибут — это класс, унаследованный от базового класса 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];
     }
}


Как видно из кода, сначала мы получаем описание нашего класса, далее проверяем наличие нашего атрибута и в случае его наличия мы формируем массив с указанным в атрибуте количеством элементов.

А теперь унаследовавшись от этого класса и задав новому классу другое значение атрибута при вызове метода мы получим массив нужной размерности.

Данная статья даёт только общее и скудное описание атрибутов, но используя его, можно понять, что это такое.
Tags:
Hubs:
-22
Comments 13
Comments Comments 13

Articles