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 /definir compilador. 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ão ignorados ou produzirão um aviso do compilador ou uma mensagem de erro se você a aplicar a qualquer outro tipo.

A aplicação ConditionalAttribute a um método indica aos compiladores que uma chamada ao método não deve ser compilada em Microsoft MSIL (linguagem intermediária), a menos que o símbolo de compilação condicional associado a ConditionalAttribute seja definido. Você receberá um erro de compilação em Visual Studio se aplicar esse atributo a um método que não retorna nulo. 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 por tipo 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 definir 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 a ConditionalAttribute; o compilador JScript não dá suporte ao atributo.

Note

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

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

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

Construtores

Nome Description
ConditionalAttribute(String)

Inicializa uma nova instância da classe ConditionalAttribute.

Propriedades

Nome Description
ConditionString

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

TypeId

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

(Herdado de Attribute)

Métodos

Nome Description
Equals(Object)

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

(Herdado de Attribute)
GetHashCode()

Devolve o código hash para esta 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 Objectatual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)

Implantações explícitas de interface

Nome Description
_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 de um objeto, que podem ser usadas para obter as informações de tipo de 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