День пятьдесят восьмой. #ЗаметкиНаПолях

Создание класса атрибута

Вы можете создавать свои атрибуты, определяя класса атрибута, производный от класса Attribute. Допустим, вы хотите отмечать имя программиста, создавшего тип:

public class AuthorAttribute : System.Attribute

{

private string name;

public double version;



public AuthorAttribute(string name)

{

this.name = name;

version = 1.0;

}

}

- суффикс Attribute в названии класса не обязателен, но соответствует стандарту наименования;

- все неабстрактные атрибуты должны содержать хотя бы один открытый конструктор;

- класс атрибута следует рассматривать как логический контейнер состояния, поэтому должен быть крайне простым, без открытых методов, событий и других членов;

- члены класса должны ограничиваться небольшим набором примитивных типов данных, перечислимыми типами и одномерными массивами (но это не рекомендуется).

Использовать атрибут можно следующим образом:

[Author("P. Ackerman", version = 1.1)]  

class SampleClass { /* … */ }

К классу атрибута можно также применить атрибут типа AttributeUsage, который задаёт следующие параметры:

- AttributeTargets – перечисление целевых объектов для атрибута (по умолчанию AttributeTargets.All);

- AllowMultiple – допустимо ли многократное использование атрибута (по умолчанию false);

- Inherited – будет ли атрибут наследоваться потомками класса (по умолчанию true).

[System.AttributeUsage(

System.AttributeTargets.Class |

System.AttributeTargets.Struct,

AllowMultiple = true,

Inherited = false)

]



Источники:

- Джеффри Рихтер “CLR via C#”. 3-е изд. – СПб.: Питер, 2012. Глава 18.

-
https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/attributes/