#define (Referência de C#)#define (C# Reference)

Use #define para definir um símbolo.You use #define to define a symbol. Quando você usa o símbolo como a expressão passada para a diretiva #if, a expressão será avaliada como true, conforme mostra o exemplo a seguir:When you use the symbol as the expression that's passed to the #if directive, the expression will evaluate to true, as the following example shows:

#define DEBUG

ComentáriosRemarks

Observação

A diretiva #define não pode ser usada para declarar valores constantes como normalmente é feito em C e C++.The #define directive cannot be used to declare constant values as is typically done in C and C++. As constantes em C# são mais bem definidas como membros estáticos de uma classe ou struct.Constants in C# are best defined as static members of a class or struct. Se você tiver várias dessas constantes, considere criar uma classe "Constantes" separada para guardá-las.If you have several such constants, consider creating a separate "Constants" class to hold them.

Os símbolos podem ser usados para especificar condições para compilação.Symbols can be used to specify conditions for compilation. É possível testar o símbolo com #if ou #elif.You can test for the symbol with either #if or #elif. Você também pode usar o ConditionalAttribute para executar uma compilação condicional.You can also use the ConditionalAttribute to perform conditional compilation.

É possível definir um símbolo, mas não é possível atribuir um valor a um símbolo.You can define a symbol, but you cannot assign a value to a symbol. A diretiva #define deve ser exibida no arquivo antes de usar as instruções que também não são diretivas de pré-processador.The #define directive must appear in the file before you use any instructions that aren't also preprocessor directives.

Você também pode definir um símbolo com a opção do compilador -define.You can also define a symbol with the -define compiler option. É possível excluir um símbolo com #undef.You can undefine a symbol with #undef.

Um símbolo definido com -define ou com #define não entra em conflito com uma variável do mesmo nome.A symbol that you define with -define or with #define does not conflict with a variable of the same name. Ou seja, um nome de variável não deve ser passado para uma diretiva de pré-processador e um símbolo apenas pode ser avaliado por uma diretiva de pré-processador.That is, a variable name should not be passed to a preprocessor directive and a symbol can only be evaluated by a preprocessor directive.

O escopo de um símbolo criado usando #define é o arquivo no qual o símbolo foi definido.The scope of a symbol that was created by using #define is the file in which the symbol was defined.

Como mostra o exemplo a seguir, é necessário colocar as diretivas #define na parte superior do arquivo.As the following example shows, you must put #define directives at the top of the file.

#define DEBUG  
//#define TRACE  
#undef TRACE  
  
using System;  
  
public class TestDefine  
{  
    static void Main()  
    {  
#if (DEBUG)  
        Console.WriteLine("Debugging is enabled.");  
#endif  
  
#if (TRACE)  
     Console.WriteLine("Tracing is enabled.");  
#endif  
    }  
}  
// Output:  
// Debugging is enabled.  

Para obter um exemplo de como excluir um símbolo, consulte #undef.For an example of how to undefine a symbol, see #undef.

Consulte tambémSee also