ConditionalAttribute Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wskazuje kompilatorom, że należy zignorować wywołanie metody lub atrybut, chyba że zdefiniowano określony symbol kompilacji warunkowej.
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
- Dziedziczenie
- Atrybuty
Przykłady
W poniższym przykładzie pokazano użycie polecenia ConditionalAttribute. W przykładzie przyjęto założenie, że warunek jest zdefiniowany za pomocą / define kompilatora. Możesz uzyskać różne wyniki, zmieniając opcję kompilatora. Opcjonalnie można zdefiniować warunki przy użyciu pragmas w przykładowym kodzie zamiast identyfikowania ich jako opcji kompilatora.
#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
Uwagi
Atrybut można zastosować ConditionalAttribute do metod i klas. Jednak jego użycie w klasach jest prawidłowe tylko dla typów, które pochodzą z Attributeklasy . ConditionalAttribute Zostanie zignorowany lub wygeneruje ostrzeżenie kompilatora lub komunikat o błędzie, jeśli zastosujesz go do dowolnego innego typu.
ConditionalAttribute Zastosowanie do metody wskazuje kompilatorom, że wywołanie metody nie powinno być kompilowane w języku pośrednim firmy Microsoft (MSIL), chyba że jest zdefiniowany symbol kompilacji warunkowej, z ConditionalAttribute którą jest skojarzony. Jeśli zastosujesz ten atrybut do metody, która nie zwróci wartości void, zostanie wyświetlony błąd kompilacji w programie Visual Studio. ConditionalAttribute Zastosowanie do atrybutu wskazuje, że atrybut nie powinien być emitowany do metadanych, chyba że zdefiniowano symbol kompilacji warunkowej. Wszystkie argumenty przekazane do metody lub atrybutu są nadal sprawdzane przez kompilator.
Aby zdefiniować symbole kompilacji warunkowej, można użyć następujących technik:
Użyj opcji wiersza polecenia kompilatora; na przykład /define:DEBUG.
Użyj zmiennych środowiskowych w powłoce systemu operacyjnego; na przykład ustaw debug=1.
Użyj pragmas w kodzie źródłowym; na przykład zdefiniuj zmienną kompilacji w następujący sposób:
#define DEBUG
#Const DEBUG=True
Aby usunąć definicję zmiennej, użyj następujących elementów:
#undef DEBUG
#Const DEBUG=False
Kompilatory zgodne ze specyfikacją języka wspólnego (CLS) mogą ignorować ConditionalAttribute. Kompilatory języka C#, F#, Visual Basic i C++ obsługują ConditionalAttribute; kompilator JScript nie obsługuje atrybutu.
Uwaga
W języku Visual Basic AddressOf
operator nie ma wpływu na ten atrybut. Na przykład Call CType(AddressOf delegate, Action)
zawsze wywołuje metodę delegate
, chociaż Call delegate()
może nie.
ConditionalAttribute jest stosowany do metod zdefiniowanych w klasach Debug i Trace .
Aby uzyskać więcej informacji na temat używania atrybutów, zobacz Atrybuty.
Konstruktory
ConditionalAttribute(String) |
Inicjuje nowe wystąpienie klasy ConditionalAttribute. |
Właściwości
ConditionString |
Pobiera symbol kompilacji warunkowej skojarzony z atrybutem ConditionalAttribute . |
TypeId |
Po zaimplementowaniu w klasie pochodnej pobiera unikatowy identyfikator dla tego elementu Attribute. (Odziedziczone po Attribute) |
Metody
Equals(Object) |
Zwraca wartość wskazującą, czy to wystąpienie jest równe podanemu obiektowi. (Odziedziczone po Attribute) |
GetHashCode() |
Zwraca wartość skrótu dla tego wystąpienia. (Odziedziczone po Attribute) |
GetType() |
Type Pobiera bieżące wystąpienie. (Odziedziczone po Object) |
IsDefaultAttribute() |
W przypadku zastąpienia w klasie pochodnej wskazuje, czy wartość tego wystąpienia jest wartością domyślną klasy pochodnej. (Odziedziczone po Attribute) |
Match(Object) |
W przypadku zastąpienia w klasie pochodnej zwraca wartość wskazującą, czy to wystąpienie jest równe określonemu obiektowi. (Odziedziczone po Attribute) |
MemberwiseClone() |
Tworzy płytkią kopię bieżącego Objectelementu . (Odziedziczone po Object) |
ToString() |
Zwraca ciąg reprezentujący bieżący obiekt. (Odziedziczone po Object) |
Jawne implementacje interfejsu
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Zestaw nazw jest mapowany na odpowiedni zestaw identyfikatorów wysyłania. (Odziedziczone po Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Pobiera informacje o typie obiektu, którego można użyć do pobrania informacji o typie interfejsu. (Odziedziczone po Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Pobiera informację o liczbie typów interfejsów, jakie zawiera obiekt (0 lub 1). (Odziedziczone po Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Umożliwia dostęp do właściwości i metod udostępnianych przez obiekt. (Odziedziczone po Attribute) |