ConditionalAttribute Třída

Definice

Signalizuje kompilátorům, že mají volání metody nebo atribut ignorovat, pokud není definovaný zadaný symbol podmíněné kompilace.

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
Dědičnost
ConditionalAttribute
Atributy

Příklady

Následující příklad ukazuje použití ConditionalAttribute. V příkladu se předpokládá, že podmínka je definována pomocí možnosti kompilátoru /define . Různé výsledky můžete získat změnou možnosti kompilátoru. Volitelně můžete podmínky definovat pomocí direktiv v ukázkovém kódu místo jejich identifikace jako možností kompilátoru.

#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

Poznámky

Atribut můžete použít ConditionalAttribute u metod a tříd. Jeho použití u tříd je však platné pouze pro typy, které jsou odvozeny z Attribute. ConditionalAttribute buď se bude ignorovat, nebo vygeneruje upozornění kompilátoru nebo chybovou zprávu, pokud ji použijete u jakéhokoli jiného typu.

Použití ConditionalAttribute na metodu indikuje kompilátorům, že volání metody by nemělo být zkompilováno do Microsoft zprostředkujícího jazyka (MSIL), pokud není definován symbol podmíněné kompilace, který je přidružen k ConditionalAttribute. Pokud tento atribut použijete na metodu, která nevrací void, zobrazí se Visual Studio chyba kompilace v. Použití ConditionalAttribute na atribut označuje, že atribut by neměl být generován do metadat, pokud není definován symbol podmíněné kompilace. Všechny argumenty předané metodě nebo atributu jsou stále kontrolovány kompilátorem.

K definování symbolů podmíněné kompilace můžete použít následující techniky:

  • Použití možností příkazového řádku kompilátoru; například /define:DEBUG.

  • Použití proměnných prostředí v prostředí operačního systému; Například nastavte DEBUG=1.

  • Používejte ve zdrojovém kódu direktivy pragmas; Například definujte proměnnou kompilace následujícím způsobem:

    #define DEBUG
    
    #Const DEBUG=True
    

    Pokud chcete zrušit definici proměnné, použijte následující příkaz:

    #undef DEBUG
    
    #Const DEBUG=False
    

Kompilátory, které jsou v souladu se specifikací CLS (Common Language Specification), mohou ignorovat ConditionalAttribute. Kompilátory C#, F#, Visual Basic a C++ podporují ConditionalAttribute; kompilátor JScript atribut nepodporuje.

Note

V Visual Basic není tímto atributem ovlivněn operátor AddressOf. Například Call CType(AddressOf delegate, Action) vždy vyvolá , delegatei když Call delegate() nemusí.

ConditionalAttribute se použije na metody definované v Debug a Trace třídách.

Další informace o používání atributů naleznete v tématu Atributy.

Konstruktory

Name Description
ConditionalAttribute(String)

Inicializuje novou instanci ConditionalAttribute třídy.

Vlastnosti

Name Description
ConditionString

Získá podmíněný kompilační symbol, který je přidružen k atributu ConditionalAttribute .

TypeId

Při implementaci v odvozené třídě získá jedinečný identifikátor pro tento Attribute.

(Zděděno od Attribute)

Metody

Name Description
Equals(Object)

Vrátí hodnotu, která určuje, zda je tato instance rovna zadanému objektu.

(Zděděno od Attribute)
GetHashCode()

Vrátí kód hash pro tuto instanci.

(Zděděno od Attribute)
GetType()

Získá Type aktuální instance.

(Zděděno od Object)
IsDefaultAttribute()

Při přepsání v odvozené třídě určuje, zda hodnota této instance je výchozí hodnotou pro odvozenou třídu.

(Zděděno od Attribute)
Match(Object)

Při přepsání v odvozené třídě vrátí hodnotu, která určuje, zda se tato instance rovná zadanému objektu.

(Zděděno od Attribute)
MemberwiseClone()

Vytvoří mělkou kopii aktuálního Object.

(Zděděno od Object)
ToString()

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)

Explicitní implementace rozhraní

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

Mapuje sadu názvů na odpovídající sadu identifikátorů pro rozesílání.

(Zděděno od Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Načte informace o typu objektu, který lze použít k získání informací o typu pro rozhraní.

(Zděděno od Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Získá počet rozhraní typu informací, které objekt poskytuje (0 nebo 1).

(Zděděno od Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Poskytuje přístup k vlastnostem a metodám vystaveným objektem.

(Zděděno od Attribute)

Platí pro