ConditionalAttribute Classe

Definição

Indica aos compiladores que uma chamada de método ou atributo deve ser ignorado, a menos que seja definido um símbolo de compilação 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
Herança
ConditionalAttribute
Atributos

Exemplos

O exemplo a seguir demonstra o uso de ConditionalAttribute. O exemplo assume que a condição está definida com a opção do compilador /define . Pode obter resultados diferentes mudando a opção do compilador. Pode, opcionalmente, definir as condições usando pragmas no código de exemplo em vez de as identificar como opções do 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

Observações

Podes aplicar o ConditionalAttribute atributo a métodos e classes. No entanto, a sua utilização em classes é válida apenas para tipos derivados de Attribute. ConditionalAttribute Qualquer um será ignorado ou gerará um aviso ou mensagem de erro do compilador se o aplicar a qualquer outro tipo.

Aplicar ConditionalAttribute a um método indica aos compiladores que uma chamada ao método não deve ser compilada para Microsoft linguagem intermédia (MSIL), a menos que o símbolo de compilação condicional associado a ConditionalAttribute esteja definido. Receberá um erro de compilação no Visual Studio se aplicar este atributo a um método que não devolve void. Aplicar ConditionalAttribute a um atributo indica que o atributo não deve ser emitido para metadados a menos que o símbolo de compilação condicional esteja definido. Quaisquer argumentos passados ao método ou atributo continuam a ser verificados por tipo pelo compilador.

Pode usar as seguintes técnicas para definir símbolos de compilação condicional:

  • Use opções de linha de comandos do compilador; por exemplo, /define:DEBUG.

  • Utilizar variáveis de ambiente na interface do sistema operativo; por exemplo, defina DEBUG=1.

  • Use pragmas no código-fonte; Por exemplo, defina a variável de compilação da seguinte forma:

    #define DEBUG
    
    #Const DEBUG=True
    

    Para desdefinir a variável, use o seguinte:

    #undef DEBUG
    
    #Const DEBUG=False
    

Compiladores que cumpram a Especificação Comum de Linguagem (CLS) podem ignorar ConditionalAttribute. Os compiladores C#, F#, Visual Basic e C++ suportam ConditionalAttribute; o compilador JScript não suporta esse atributo.

Note

Em Visual Basic, o operador AddressOf não é afetado por este atributo. Por exemplo, Call CType(AddressOf delegate, Action) invoca sempre delegate, embora Call delegate() possa não o fazer.

ConditionalAttributeé aplicado aos métodos definidos nas Debug classes e.Trace

Para mais informações sobre como usar os atributos, consulte Atributos.

Construtores

Name Description
ConditionalAttribute(String)

Inicializa uma nova instância da ConditionalAttribute classe.

Propriedades

Name Description
ConditionString

Obtém o símbolo de compilação condicional associado ao ConditionalAttribute atributo.

TypeId

Quando implementado numa classe derivada, obtém um identificador único para esta Attribute.

(Herdado de Attribute)

Métodos

Name Description
Equals(Object)

Devolve um valor que indica se esta instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Devolve o código de hash para esta instância.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando sobrescrito numa classe derivada, indica se o valor desta instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando sobrescrito numa classe derivada, devolve um valor que indica se esta instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)

Implementações de Interface Explícita

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

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de despacho.

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

Recupera a informação de tipo de um objeto, que pode ser usada para obter a informação de tipo para uma interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Recupera o número de interfaces de informações de tipo que um objeto fornece (0 ou 1).

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

Proporciona acesso a propriedades e métodos expostos por um objeto.

(Herdado de Attribute)

Aplica-se a