Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1404 of 1492 menu
◀ ▶

AttributeUsage

Без AttributeUsage атрибут можно ставить почти везде. AttributeTargets.Class оставляет только классы. Поставить такой атрибут на метод код не компилирует.

Синтаксис

[AttributeUsage(AttributeTargets.Class)] class NoteAttribute : Attribute { }

Пример

Давайте разрешить атрибут только на классе и пометить класс:

using System; [AttributeUsage(AttributeTargets.Class)] class OnlyClassAttribute : Attribute { } [OnlyClass] class Target { } class Program { static void Main() { bool res = typeof(Target).IsDefined(typeof(OnlyClassAttribute), false); Console.WriteLine(res); } }

Результат выполнения кода:

True

Пример

Давайте прочитать цель из метаданных AttributeUsage:

using System; [AttributeUsage(AttributeTargets.Class)] class OnlyClassAttribute : Attribute { } class Program { static void Main() { AttributeUsageAttribute usage = (AttributeUsageAttribute) Attribute.GetCustomAttribute( typeof(OnlyClassAttribute), typeof(AttributeUsageAttribute)); bool res = (usage.ValidOn & AttributeTargets.Class) != 0; Console.WriteLine(res); } }

Результат выполнения кода:

True

Пример

Давайте разрешить атрибут на методе и пометить метод:

using System; using System.Reflection; [AttributeUsage(AttributeTargets.Method)] class OnMethodAttribute : Attribute { } class Target { [OnMethod] public void Run() { } } class Program { static void Main() { MethodInfo method = typeof(Target).GetMethod("Run"); bool res = method.IsDefined(typeof(OnMethodAttribute), false); Console.WriteLine(res); } }

Результат выполнения кода:

True

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить