Бөлісу құралы:


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 . Вы можете получить различные результаты, изменив параметр компилятора. При необходимости можно определить условия, используя прагмы в примере кода вместо того, чтобы определять их как параметры компилятора.

#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.

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

    #define DEBUG  
    
    #Const DEBUG=True  
    

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

    #undef DEBUG  
    
    #Const DEBUG=False  
    

Компиляторы, соответствующие спецификации CLS, могут игнорировать ConditionalAttribute. Компиляторы C#, F#, Visual Basic и C++ поддерживают ConditionalAttribute; компилятор 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)

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