ConditionalAttribute Clase

Definición

Indica a los compiladores que se debe omitir una llamada al método o un atributo a menos que se defina un símbolo de compilación condicional especificado.

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
Herencia
ConditionalAttribute
Atributos

Ejemplos

En el ejemplo siguiente se muestra el uso de ConditionalAttribute. En el ejemplo se supone que la condición se define con la opción del compilador /define . Puede obtener resultados diferentes cambiando la opción del compilador. Opcionalmente, puede definir las condiciones mediante pragmas en el código de ejemplo en lugar de identificarlas como opciones del compilador.

#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

Comentarios

Puede aplicar el ConditionalAttribute atributo a métodos y clases. Sin embargo, su uso en clases solo es válido para los tipos derivados de Attribute. ConditionalAttribute se omitirá o generará una advertencia del compilador o un mensaje de error si se aplica a cualquier otro tipo.

Aplicar ConditionalAttribute a un método indica a los compiladores que una llamada al método no se debe compilar en Microsoft lenguaje intermedio (MSIL), a menos que se defina el símbolo de compilación condicional asociado a ConditionalAttribute. Recibirá un error de compilación en Visual Studio si aplica este atributo a un método que no devuelve void. La aplicación ConditionalAttribute a un atributo indica que el atributo no se debe emitir a los metadatos a menos que se defina el símbolo de compilación condicional. El compilador sigue comprobando los argumentos pasados al método o atributo.

Puede usar las técnicas siguientes para definir símbolos de compilación condicional:

  • Usar opciones de línea de comandos del compilador; por ejemplo, /define:DEBUG.

  • Usar variables de entorno en el shell del sistema operativo; por ejemplo, establezca DEBUG=1.

  • Usar pragmas en el código fuente; Por ejemplo, defina la variable de compilación de la siguiente manera:

    #define DEBUG
    
    #Const DEBUG=True
    

    Para anular la definición de la variable, use lo siguiente:

    #undef DEBUG
    
    #Const DEBUG=False
    

Los compiladores que cumplen con Common Language Specification (CLS) pueden omitir ConditionalAttribute. Los compiladores de C#, F#, Visual Basic y C++ admiten ConditionalAttribute; el compilador de JScript no admite el atributo .

Nota:

En Visual Basic, el operador AddressOf no se ve afectado por este atributo. Por ejemplo, Call CType(AddressOf delegate, Action) siempre invoca delegate, aunque Call delegate() es posible que no lo haga.

ConditionalAttribute se aplica a los métodos definidos en las Debug clases y Trace .

Para obtener más información sobre cómo usar atributos, vea Atributos.

Constructores

Nombre Description
ConditionalAttribute(String)

Inicializa una nueva instancia de la clase ConditionalAttribute.

Propiedades

Nombre Description
ConditionString

Obtiene el símbolo de compilación condicional asociado al ConditionalAttribute atributo .

TypeId

Cuando se implementa en una clase derivada, obtiene un identificador único para este Attribute.

(Heredado de Attribute)

Métodos

Nombre Description
Equals(Object)

Devuelve un valor que indica si esta instancia es igual a un objeto especificado.

(Heredado de Attribute)
GetHashCode()

Devuelve el código hash de esta instancia.

(Heredado de Attribute)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
IsDefaultAttribute()

Cuando se reemplaza en una clase derivada, indica si el valor de esta instancia es el valor predeterminado de la clase derivada.

(Heredado de Attribute)
Match(Object)

Cuando se reemplaza en una clase derivada, devuelve un valor que indica si esta instancia es igual a un objeto especificado.

(Heredado de Attribute)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

(Heredado de Object)

Implementaciones de interfaz explícitas

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

Asigna un conjunto de nombres a un conjunto correspondiente de identificadores de envío.

(Heredado de Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Recupera la información de tipo de un objeto, que se puede usar para obtener la información de tipo de una interfaz.

(Heredado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera el número de interfaces de información de tipo que proporciona un objeto (0 ó 1).

(Heredado de Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Proporciona acceso a propiedades y métodos expuestos por un objeto .

(Heredado de Attribute)

Se aplica a