День пятьдесят восьмой. #ЗаметкиНаПолях
Создание класса атрибута
Вы можете создавать свои атрибуты, определяя класса атрибута, производный от класса
- все неабстрактные атрибуты должны содержать хотя бы один открытый конструктор;
- класс атрибута следует рассматривать как логический контейнер состояния, поэтому должен быть крайне простым, без открытых методов, событий и других членов;
- члены класса должны ограничиваться небольшим набором примитивных типов данных, перечислимыми типами и одномерными массивами (но это не рекомендуется).
Использовать атрибут можно следующим образом:
-
-
-
- Джеффри Рихтер “CLR via C#”. 3-е изд. – СПб.: Питер, 2012. Глава 18.
- https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/attributes/
Создание класса атрибута
Вы можете создавать свои атрибуты, определяя класса атрибута, производный от класса
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/