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. В примере предполагается, что условие определено с параметром компилятора /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 к методу указывает компиляторам, что вызов метода не должен быть скомпилирован в Microsoft промежуточном языке (MSIL), если не определен условный символ компиляции, связанный с ConditionalAttribute. При применении этого атрибута к методу, который не возвращает void, вы получите ошибку компиляции в Visual Studio. Применение ConditionalAttribute к атрибуту указывает, что атрибут не должен выдаваться метаданным, если не определен символ условной компиляции. Все аргументы, передаваемые методу или атрибуту, по-прежнему проверяются компилятором.
Для определения символов условной компиляции можно использовать следующие методы:
Используйте параметры командной строки компилятора; например, /define:DEBUG.
Используйте переменные среды в оболочке операционной системы; например, задайте DEBUG=1.
Используйте pragmas в исходном коде; Например, определите переменную компиляции следующим образом:
#define DEBUG#Const DEBUG=TrueЧтобы отменить настройку переменной, используйте следующую команду:
#undef DEBUG#Const DEBUG=False
Компиляторы, соответствующие спецификации CLS, могут игнорироваться ConditionalAttribute. Компиляторы C#, F#, Visual Basic и C++ поддерживают ConditionalAttribute; компилятор JScript не поддерживает атрибут.
Note
В 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) |