ConditionalAttribute Класс

Определение

Указывает компиляторам, что вызов метода или атрибут следует игнорировать, если не определен заданный символ условной компиляции.

public ref class ConditionalAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)]
public sealed class ConditionalAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=true)]
[System.Serializable]
public sealed class ConditionalAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class ConditionalAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)>]
type ConditionalAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Method, AllowMultiple=true)>]
[<System.Serializable>]
type ConditionalAttribute = class
    inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Method, AllowMultiple=true)>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type ConditionalAttribute = class
    inherit Attribute
Public NotInheritable Class ConditionalAttribute
Inherits Attribute
Наследование
ConditionalAttribute
Атрибуты

Примеры

В следующем примере показано использование функции ConditionalAttribute. В примере предполагается, что условие определено с параметром компилятора /define . Вы можете получить различные результаты, изменив параметр компилятора. При необходимости можно определить условия с помощью директив pragmas в примере кода вместо идентификации их в качестве параметров компилятора.

#define CONDITION1
#define CONDITION2
using System;
using System.Diagnostics;

class Test
{
    static void Main()
    {
        Console.WriteLine("Calling Method1");
        Method1(3);
        Console.WriteLine("Calling Method2");
        Method2();

        Console.WriteLine("Using the Debug class");
        Debug.Listeners.Add(new ConsoleTraceListener());
        Debug.WriteLine("DEBUG is defined");
    }

    [Conditional("CONDITION1")]
    public static void Method1(int x)
    {
        Console.WriteLine("CONDITION1 is defined");
    }

    [Conditional("CONDITION1"), Conditional("CONDITION2")]
    public static void Method2()
    {
        Console.WriteLine("CONDITION1 or CONDITION2 is defined");
    }
}

/*
When compiled as shown, the application (named ConsoleApp)
produces the following output.

Calling Method1
CONDITION1 is defined
Calling Method2
CONDITION1 or CONDITION2 is defined
Using the Debug class
DEBUG is defined
*/
#Const CONDITION1 = True
#Const CONDITION2 = True
Imports System.Diagnostics

Class Test

    Shared Sub Main()
        Console.WriteLine("Calling Method1")
        Method1(3)
        Console.WriteLine("Calling Method2")
        Method2()
        
        Console.WriteLine("Using the Debug class")
        Debug.Listeners.Add(New ConsoleTraceListener())
        Debug.WriteLine("DEBUG is defined")
    End Sub
       
    <ConditionalAttribute("CONDITION1")> _
    Shared Sub Method1(x As Integer)
        Console.WriteLine("CONDITION1 is defined")
    End Sub
    
    <ConditionalAttribute("CONDITION1"), ConditionalAttribute("CONDITION2")> _
    Shared Sub Method2()
        Console.WriteLine("CONDITION1 or CONDITIOIN2 is defined")
    End Sub
    
End Class


' When compiled as shown, the application (named ConsoleApp) 
' produces the following output.

'Calling Method1
'CONDITION1 is defined
'Calling Method2
'CONDITION1 or CONDITION2 is defined
'Using the Debug class
'DEBUG is defined

Комментарии

Атрибут можно применить ConditionalAttribute к методам и классам. Однако его использование в классах допустимо только для типов, производных от Attribute. ConditionalAttribute либо будет игнорироваться, либо выдаст предупреждение компилятора или сообщение об ошибке, если применить его к любому другому типу.

Применение ConditionalAttribute к методу указывает компиляторам, что вызов метода не должен компилироваться на промежуточный язык Майкрософт (MSIL), если только не определен символ условной компиляции, связанный с ConditionalAttribute ним. При применении этого атрибута к методу, который не возвращает void, вы получите ошибку компиляции в Visual Studio. Применение ConditionalAttribute к атрибуту указывает, что атрибут не должен выдаваться в метаданные, если не определен символ условной компиляции. Все аргументы, передаваемые методу или атрибуту, по-прежнему проверяются компилятором.

Для определения символов условной компиляции можно использовать следующие методы:

  • Используйте параметры командной строки компилятора; Например, /define:DEBUG.

  • Используйте переменные среды в оболочке операционной системы; например, задайте DEBUG=1.

  • Используйте pragmas в исходном коде; Например, определите переменную компиляции следующим образом:

    #define DEBUG  
    
    #Const DEBUG=True  
    

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

    #undef DEBUG  
    
    #Const DEBUG=False  
    

Компиляторы, соответствующие спецификации CLS, могут игнорироваться ConditionalAttribute. Компиляторы ConditionalAttributeC#, F#, Visual Basic и C++; компилятор JScript не поддерживает атрибут.

Примечание

В Visual Basic этот AddressOf атрибут не влияет на оператор. Например, Call CType(AddressOf delegate, Action) всегда вызывается delegate, хотя Call delegate() и не может.

ConditionalAttribute применяется к методам, определенным в Debug и Trace классах.

Дополнительные сведения об использовании атрибутов см. в разделе "Атрибуты".

Конструкторы

ConditionalAttribute(String)

Инициализирует новый экземпляр класса ConditionalAttribute.

Свойства

ConditionString

Возвращает символ условной компиляции, связанный с атрибутом ConditionalAttribute.

TypeId

В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute.

(Унаследовано от Attribute)

Методы

Equals(Object)

Возвращает значение, показывающее, равен ли экземпляр указанному объекту.

(Унаследовано от Attribute)
GetHashCode()

Возвращает хэш-код данного экземпляра.

(Унаследовано от Attribute)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
IsDefaultAttribute()

При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса.

(Унаследовано от Attribute)
Match(Object)

При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту.

(Унаследовано от Attribute)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)

Явные реализации интерфейса

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации.

(Унаследовано от Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса.

(Унаследовано от Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1).

(Унаследовано от Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Предоставляет доступ к открытым свойствам и методам объекта.

(Унаследовано от Attribute)

Применяется к