#define (Справочник по C#)#define (C# Reference)

#define позволяет определить символ.You use #define to define a symbol. При использовании символа в качестве выражения, которое передается директиве #if, выражение будет иметь значение true, как показано в следующем примере: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

ПримечанияRemarks

Примечание

Директиву #define нельзя использовать для объявления значений констант, как это обычно делается в C и C++.The #define directive cannot be used to declare constant values as is typically done in C and C++. Для определения констант в C# следует использовать статические элементы класса или структуры.Constants in C# are best defined as static members of a class or struct. При наличии нескольких констант имеет смысл создать для них отдельный класс "Constants".If you have several such constants, consider creating a separate "Constants" class to hold them.

Символы можно использовать для указания условий компиляции.Symbols can be used to specify conditions for compilation. Для проверки символов можно использовать директивы #if или #elif.You can test for the symbol with either #if or #elif. Для условной компиляции также можно использовать ConditionalAttribute.You can also use the ConditionalAttribute to perform conditional compilation.

Можно определить символ, но нельзя назначить символу значение.You can define a symbol, but you cannot assign a value to a symbol. Директива #define должна находиться в файле перед использованием любых инструкций, которые также не являются директивами препроцессора.The #define directive must appear in the file before you use any instructions that aren't also preprocessor directives.

Также символ можно определить с помощью параметра компилятора -define.You can also define a symbol with the -define compiler option. Для отмены определения символа служит директива #undef.You can undefine a symbol with #undef.

Символ, определенный с помощью -define или #define, не конфликтует с одноименной переменной.A symbol that you define with -define or with #define does not conflict with a variable of the same name. Имя переменной не должно передаваться директиве препроцессора, а символ может вычисляться только директивой препроцессора.That is, a variable name should not be passed to a preprocessor directive and a symbol can only be evaluated by a preprocessor directive.

Область символа, которая была создана с помощью директивы #define, — это файл, в котором был определен символ.The scope of a symbol that was created by using #define is the file in which the symbol was defined.

Как показано в следующем примере, необходимо поместить директивы #define в верхнюю часть файла.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.  

Пример отмены определения символа см. в разделе #undef.For an example of how to undefine a symbol, see #undef.

См. такжеSee also