ConditionalAttribute Klasa

Definicja

Wskazuje kompilatory, że wywołanie metody lub atrybut powinny być ignorowane, 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
ConditionalAttribute
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. W Visual Studio zostanie wyświetlony błąd kompilacji, jeśli zastosujesz ten atrybut do metody, która nie zwróci wartości void. 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 C#, F#, Visual Basic i C++ obsługują ConditionalAttribute; kompilator JScript nie obsługuje atrybutu.

Uwaga

W 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 Attributeelementu .

(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 wartość bieżącego wystąpienia.

(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)

Po przesłonięciu 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 dla obiektu, który może służyć do pobierania informacji o typie dla 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)

Dotyczy