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 представляет, вероятно, наибольший интерес среди всех встроенных атрибутов. Ведь он позволяет создавать
Conditional — это, по существу, еще одно наименование класса System. Diagnostics . ConditionalAttribute. Для применения атрибута Conditional в исходный код программы следует включить пространство имен System. Diagnostics. Рассмотрим применение данного атрибута на следующем примере программы.
// Продемонстрировать применение встроенного атрибута Conditional.
#define TRIAL
using System;
using System.Diagnostics;
class Test {
[Conditional('TRIAL')] void Trial() {
Console.WriteLine('Пробная версия, не ' +
'предназначенная для распространения.');
[Conditional('RELEASE')] void Release () {
Console.WriteLine('Окончательная рабочая версия.');
}
static void Main() {
Test t = new Test();
t.Trial(); //вызывается только в том случае, если // определен идентификатор TRIAL t.ReleaseO; // вызывается только в том случае, если // определен идентификатор RELEASE
}
}
Эта программа дает следующий результат.
Пробная версия, не предназначенная для распространения.
Рассмотрим эту программу подробнее, чтобы стал понятнее результат ее выполнения. Прежде всего обратите внимание на то, что в этой программе определяется идентификатор TRIAL. Затем обратите внимание на определение методов Trial () и Release (). Каждому из них предшествует атрибут Conditional, общая форма которого приведена ниже:
[Conditional
где
Оба метода, Trial () nRelease (), вызываются в методе Main (). Но поскольку определен один лишь идентификатор TRIAL, то выполняется только метод Trial (), тогда как метод Release () игнорируется. Если же определить идентификатор RELEASE,
