Директива компилятора #Define в C#

В C я мог объявить директиву компилятора следующим образом:

#define MY_NUMBER 10

Однако в C#, я только, кажется, могу сделать это:

#define MY_NUMBER

Который очевидно бесполезен в этом случае.

Это корректно, или я делаю что-то не так? В противном случае кто-либо может предложить способ сделать это, или в пространстве имен или в уровне решения? Я думал о, возможно, создании статического класса, но это, кажется, излишество для одного значения.

7
задан Paul Michaels 10 June 2010 в 08:10
поделиться

6 ответов

Да, это правильно.

Вот цитата из документации MSDN:

Директивы предварительной обработки предоставляют возможность условно пропускать разделы исходных файлов, сообщать сообщать об ошибках и предупреждениях, а также разграничивать отдельные области исходного кода. Термин "предварительная обработка директивы" используется только для согласованности с языками программирования C и C++ языками программирования. В C# нет нет отдельного шага предварительной обработки; директивы предварительной обработки обрабатываются как часть лексического фазы анализа.

Поэтому вы не можете определять константы компилятора, как в C и C++.

Связанные ресурсы:

6
ответ дан 6 December 2019 в 09:58
поделиться

Да, вы правы. const и readonly действительно являются вашими единственными вариантами.

3
ответ дан 6 December 2019 в 09:58
поделиться

Многие другие ответы предлагают использовать поле public const. Однако обратите внимание, что public const будет компилироваться в сборки, ссылающиеся на него, что заставит вас перекомпилировать не только сборку, в которой оно определено, но и все сборки, ссылающиеся на него, если вы когда-нибудь измените значение const.

Если вы не уверены, что значение никогда не изменится, то public static readonly поле - лучшая альтернатива.

5
ответ дан 6 December 2019 в 09:58
поделиться

Вы также можете проверить перечисления, например

enum Numbers
{
    Nothing = 0,
    Dads = 5,
    My = 10,
    LittleJims = 25
}

Итак, вместо MY_NUMBER C у вас есть Numbers.My.

1
ответ дан 6 December 2019 в 09:58
поделиться

Вы можете определить константу или статику только для чтения, и, если хотите, условно, вы можете заключить ее в директиву #if

#if DEBUG
private const int MY_NUMBER = 10;
#else
private const int MY_NUMBER = 20;
#endif
3
ответ дан 6 December 2019 в 09:58
поделиться

Use public const


AFAIK,

C # не использует определения препроцессора для выполнения замены в коде, поэтому вам нужно использовать константу.

Это должно помочь:

public const int MY_NUMBER = 10;
1
ответ дан 6 December 2019 в 09:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: