ConditionalAttribute Classe

Definizione

Indica ai compilatori che una chiamata al metodo o un attributo deve essere ignorato a meno che non sia definito un simbolo di compilazione condizionale specificato.

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
Ereditarietà
ConditionalAttribute
Attributi

Esempio

Nell'esempio seguente viene illustrato l'uso di ConditionalAttribute. Nell'esempio si presuppone che la condizione sia definita con l'opzione del compilatore /define . È possibile ottenere risultati diversi modificando l'opzione del compilatore. Facoltativamente, è possibile definire le condizioni usando pragmas nel codice di esempio anziché identificarle come opzioni del compilatore.

#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

Commenti

È possibile applicare l'attributo ConditionalAttribute a metodi e classi. Tuttavia, l'uso delle classi è valido solo per i tipi derivati da Attribute. ConditionalAttribute verrà ignorato o genererà un avviso del compilatore o un messaggio di errore se lo si applica a qualsiasi altro tipo.

L'applicazione di ConditionalAttribute a un metodo indica ai compilatori che una chiamata al metodo non deve essere compilata in Microsoft linguaggio intermedio (MSIL) a meno che non venga definito il simbolo di compilazione condizionale associato a ConditionalAttribute. Se si applica questo attributo a un metodo che non restituisce void, verrà visualizzato un errore di compilazione in Visual Studio. L'applicazione ConditionalAttribute a un attributo indica che l'attributo non deve essere generato ai metadati a meno che non sia definito il simbolo di compilazione condizionale. Tutti gli argomenti passati al metodo o all'attributo vengono comunque controllati dal compilatore.

È possibile usare le tecniche seguenti per definire i simboli di compilazione condizionale:

  • Usare le opzioni della riga di comando del compilatore; ad esempio /define:DEBUG.

  • Usare le variabili di ambiente nella shell del sistema operativo; ad esempio , impostare DEBUG=1.

  • Usare pragmas nel codice sorgente; Ad esempio, definire la variabile di compilazione come indicato di seguito:

    #define DEBUG
    
    #Const DEBUG=True
    

    Per annullare la definizione della variabile, usare quanto segue:

    #undef DEBUG
    
    #Const DEBUG=False
    

I compilatori conformi a Common Language Specification (CLS) possono ignorare ConditionalAttribute. I compilatori C#, F#, Visual Basic e C++ supportano ConditionalAttribute. Il compilatore JScript non supporta l'attributo .

Note

In Visual Basic l'operatore /> Call CType(AddressOf delegate, Action) richiama delegatesempre , anche se Call delegate() potrebbe non essere .

ConditionalAttribute viene applicato ai metodi definiti nelle Debug classi e Trace .

Per altre informazioni su come usare gli attributi, vedere Attributi.

Costruttori

Nome Descrizione
ConditionalAttribute(String)

Inizializza una nuova istanza della classe ConditionalAttribute.

Proprietà

Nome Descrizione
ConditionString

Ottiene il simbolo di compilazione condizionale associato all'attributo ConditionalAttribute .

TypeId

Se implementato in una classe derivata, ottiene un identificatore univoco per questo Attribute.

(Ereditato da Attribute)

Metodi

Nome Descrizione
Equals(Object)

Restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
GetHashCode()

Restituisce il codice hash per questa istanza.

(Ereditato da Attribute)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
IsDefaultAttribute()

Quando sottoposto a override in una classe derivata, indica se il valore di questa istanza è il valore predefinito per la classe derivata.

(Ereditato da Attribute)
Match(Object)

Quando sottoposto a override in una classe derivata, restituisce un valore che indica se questa istanza è uguale a un oggetto specificato.

(Ereditato da Attribute)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Implementazioni dell'interfaccia esplicita

Nome Descrizione
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Esegue il mapping di un set di nomi a un set corrispondente di identificatori dispatch.

(Ereditato da Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera le informazioni sul tipo per un oggetto, che può essere utilizzato per ottenere le informazioni sul tipo per un'interfaccia.

(Ereditato da Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera il numero di interfacce di informazioni sul tipo fornite da un oggetto (0 o 1).

(Ereditato da Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Fornisce l'accesso alle proprietà e ai metodi esposti da un oggetto .

(Ereditato da Attribute)

Si applica a