В C# предусмотрено несколько встроенных атрибутов, но три из них имеют особое значение, поскольку они применяются в самых разных ситуациях. Это атрибутыAttributeUsage, ConditionalиObsolete,рассматриваемые далее по порядку.

Атрибут AttributeUsage

Как упоминалось ранее, атрибутAttributeUsageопределяет типы элементов, к которым может быть применен объявляемый атрибут.AttributeUsage— это, по существу, еще одно наименование классаSystem. AttributeUsageAttribute.У него имеется следующий конструктор:

AttributeUsage(AttributeTargetsvalidOn)

гдеvalidOnобозначает один или несколько элементов, к которым может быть применен объявляемый атрибут, тогда какAttributeTargets— перечисление, в котором определяются приведенные ниже значения.

АН

Assembly

Class

Constructor

Delegate

Enum

Event

Field

GenericParameter

Interface

Method

Module

Parameter

Property

ReturnValue

Struct

Два этих значения или более можно объединить с помощью логической операции ИЛИ. Например, для указания атрибута, применяемого только к полям и свойствам, используются следующие значения.

AttributeTargets.Field I AttributeTargets.Property

В классе атрибутаAttributeUsageподдерживаются два именованных параметра. Первым из них является параметрAllowMultiple,принимающий логическое значение. Если это значение истинно, то атрибут может быть применен к одному и тому же элементу неоднократно. Второй именованный параметр,Inherited,также принимает логическое значение. Если это значение истинно, то атрибут наследуется производными классами, а иначе он не наследуется. По умолчанию параметрAllowMultipleпринимает ложное значение(false),а параметрInherited— истинное значение(true).

В классе атрибутаAttributeUsageопределяется также доступное только для чтения свойствоValidOn.Оно возвращает значение типаAttributeTargets,определяющее типы элементов, к которым можно применять объявляемый атрибут. По умолчанию используется значениеAttributeTargets .All.

Атрибут Conditional

АтрибутConditionalпредставляет, вероятно, наибольший интерес среди всех встроенных атрибутов. Ведь он позволяет создаватьусловные методы, которые вызываются только в том случае, если с помощью директивы #defineопределен конкретный идентификатор, а иначе метод пропускается. Следовательно, условный метод служит альтернативой условной компиляции по директиве #if.

Перейти на страницу:

Похожие книги