Атрибуты в C#

от автора

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

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

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

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

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

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

ссылка на оригинал статьи http://habrahabr.ru/post/172859/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *