Partilhar via


ConditionalAttribute Classe

Definição

Indica a compiladores que um atributo ou chamada de método deve ser ignorado a menos que um símbolo de compilação condicional especificado seja definido.

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 pressupõe que a condição seja definida com a opção do compilador /define . Você pode obter resultados diferentes alterando a opção do compilador. Opcionalmente, você pode definir as condições usando pragmas no código de exemplo em vez de identificá-las 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

Comentários

Você pode aplicar o ConditionalAttribute atributo a métodos e classes. No entanto, seu uso em classes é válido apenas para tipos derivados de Attribute. ConditionalAttribute será ignorado ou produzirá um aviso do compilador ou uma mensagem de erro se você a aplicar a qualquer outro tipo.

ConditionalAttribute Aplicar a um método indica aos compiladores que uma chamada para o método não deve ser compilada no MSIL (Microsoft Intermediate Language), a menos que o símbolo de compilação condicional associado ConditionalAttribute a seja definido. Você receberá um erro de compilação no Visual Studio se aplicar esse atributo a um método que não retorna void. ConditionalAttribute Aplicar a um atributo indica que o atributo não deve ser emitido para metadados, a menos que o símbolo de compilação condicional seja definido. Todos os argumentos passados para o método ou atributo ainda são verificados pelo compilador.

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

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

  • Usar variáveis de ambiente no shell do sistema operacional; por exemplo, defina DEBUG=1.

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

    #define DEBUG  
    
    #Const DEBUG=True  
    

    Para desdefinir a variável, use o seguinte:

    #undef DEBUG  
    
    #Const DEBUG=False  
    

Os compiladores que estão em conformidade com a CLS (Common Language Specification) têm permissão para ignorar ConditionalAttribute. Os compiladores C#, F#, Visual Basic e C++ dão suporte ConditionalAttributea ; o compilador JScript não dá suporte ao atributo.

Observação

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

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

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

Construtores

ConditionalAttribute(String)

Inicializa uma nova instância da classe ConditionalAttribute.

Propriedades

ConditionString

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

TypeId

Quando implementado em uma classe derivada, obtém um identificador exclusivo para este Attribute.

(Herdado de Attribute)

Métodos

Equals(Object)

Retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
GetHashCode()

Retorna o código hash para a instância.

(Herdado de Attribute)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
IsDefaultAttribute()

Quando substituído em uma classe derivada, indica se o valor dessa instância é o valor padrão para a classe derivada.

(Herdado de Attribute)
Match(Object)

Quando substituído em uma classe derivada, retorna um valor que indica se essa instância é igual a um objeto especificado.

(Herdado de Attribute)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

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

Mapeia um conjunto de nomes para um conjunto correspondente de identificadores de expedição.

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

Recupera as informações de tipo para um objeto, que pode ser usado para obter as informações de tipo para uma interface.

(Herdado de Attribute)
_Attribute.GetTypeInfoCount(UInt32)

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

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

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

(Herdado de Attribute)

Aplica-se a